我有一个名为"y“的列表,其中有8个形状为(180000 )的数值数组,现在我想创建一个新的数值数组"Collision”,其形状与计算y的不为0的数值的数量相同。请参见以下示例:
import numpy as np
collisions = np.zeros(len(y[0]), dtype=np.uint8)
for yi in y:
collisions[np.where(yi > 0)] += 1这个函数的计算需要较长的时间。有没有更快的实现来做到这一点?
发布于 2021-02-13 19:20:18
我不确定为什么你的计算花了这么长的时间,希望这有助于澄清,例如你的数组列表是这样的:
import numpy as np
y = [np.random.normal(0,1,180000) for i in range(8)]运行你的代码,它工作得很好:
collisions = np.zeros(len(y[0]), dtype=np.uint8)
for yi in y:
collisions[np.where(yi > 0)] += 1
collisions
array([4, 2, 4, ..., 4, 4, 5], dtype=uint8)你可以像这样做得更快一点,基本上把你的数组列表变成一个矩阵,然后计算一个>0的行和,但我看不出上面有什么问题:
(np.array(y)>0).sum(axis=0)
array([4, 2, 4, ..., 4, 4, 5])发布于 2021-02-13 19:33:12
我假设你正在寻找类似这样的东西:
import numpy as np
# simulating your data by randomly generating numbers in [-0.5, 0.5)
y = np.random.rand(8, 180_000) - 0.5
print(y.shape) # (8, 180000)
collisions = np.sum(y > 0, axis=0, dtype=np.uint8)
print(collisions.shape) # (180000,)
print(collisions) # [4 4 4 ... 1 6 7]https://stackoverflow.com/questions/66184421
复制相似问题