如何将函数应用于numpy矩阵的所有列?

时间:2013-11-28 15:02:17

标签: python numpy

这应该是一个标准问题,但我找不到答案:(

我有一个numpy darray n样本(原始)和p变量(观察)。  我想计算每个变量非0的次数。

我会使用像

这样的函数
sum([1 for i in column if i!=0])

但是如何将此函数应用于矩阵的所有列?

2 个答案:

答案 0 :(得分:1)

来自这篇文章:How to apply numpy.linalg.norm to each row of a matrix?

如果操作支持axis,请使用axis参数,通常更快,

否则,np.apply_along_axis可以提供帮助。

这是numpy.count_nonzero

所以这是一个简单的答案:

import numpy as np

arr = np.eye(3)
np.apply_along_axis(np.count_nonzero, 0, arr)

答案 1 :(得分:1)

您可以对通过将原始数组与零进行比较而创建的布尔数组使用np.sum,使用axis关键字参数指示是否要计算行数或列数。在你的情况下:

>>> a = np.array([[0, 1, 1, 0],[1, 1, 0, 0]])
>>> a
array([[0, 1, 1, 0],
       [1, 1, 0, 0]])
>>> np.sum(a != 0, axis=0)
array([1, 2, 1, 0])