仅计算numpy数组的1列中的非零值

时间:2013-12-06 12:11:45

标签: python arrays numpy

我有一个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]之间)

3 个答案:

答案 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数组有什么形状,但希望你能看出我的意思。 :)