我有一个Numpy数组,按如下方式创建
data=np.zeros(500,dtype='float32, (50000,2)float32')
这个数组充满了我从一些测量中获得的值,并且应该反映出在每个时间点(500个时间点的空间)我们可以获得50.000 x和y-坐标。
稍后在我的代码中使用bisect
- 就像搜索一样,我需要知道我的数组中有多少X-coords(测量点)实际上是我最初用np.count_nonzero(data)
做的,这就产生了以下问题:
Fake data:
1 1
2 2
3 0
4 4
5 0
6 6
7 7
8 8
9 9
10 10
非零计数在此返回18个值,然后代码进入bisect
- 类似于使用data[time][1][0][0]
作为min X-coord和data[time][1][(np.count_nonzero(data)][0]
作为max x-coord进行搜索在数组中停止在9而不是10。
我可以使用while循环手动计算数组中的非零值(在X-coord列中),但这很愚蠢,我假设有一些内置的numpy功能。我的问题是我所需要的内置功能或修改np.count_nonzero(data)
,因为文档在这方面没有提供太多信息(link到numpy doc)。
- 简化问题 -
我可以使用 Numpy 功能来计算单个列的非零值吗? (即在data[time][1][0][0]
和data[time][1][max][0]
之间)
答案 0 :(得分:2)
也许更好的方法是使用nonzero
过滤数组并迭代结果:
nonZeroData = data[np.nonzero(data[time][1])]
仅从第二列计算零:
nonZeroYCount = np.count_nonzero(data[time][1][:, 1])
答案 1 :(得分:1)
如果我理解正确,请从data[time][1][0][0]
到data[time][1][max][0]
选择元素:
data[time][1][:max+1,0]
修改强>:
每次都计算所有非零值:
(data["f1"][:,:,0] != 0).sum(1)
答案 2 :(得分:0)
为什么不考虑使用data != 0
来获取bool
矩阵?
您可以使用:
stat = sum(data != 0)
计算非零条目。
我不确定你的data
数组有什么形状,但希望你能看出我的意思。 :)