在2D numpy数组中对所有列进行操作的方法。

时间:2017-07-31 22:21:18

标签: python arrays numpy

我在2D ndarray中有一个值列表列表(其中每个值列表的长度相同)。 实施例

[[0,1,0],
 [0,1,0],
 [0,1,0],
 [1,0,1],
 [1,0,1]]

我想执行一个平均列的操作,如果平均值大于.5则返回。我怎么能在numpy中实现这个目标?

我知道我可以使用

for i in range(len(vectors[0])):
    cur_vals = []        
    for j in range(len(vectors)):
        cur_vals.append(vectors[j][i])
    col_operation(cur_vals)

但是我被告知numpy提供类似于R的实用程序来执行此操作,所以我正在寻找它。

1 个答案:

答案 0 :(得分:0)

您可以指定.mean()的轴参数:

In [180]: a
Out[180]: 
array([[0, 1, 0],
       [0, 1, 0],
       [0, 1, 0],
       [1, 0, 1],
       [1, 0, 1]])

In [194]: a.mean(axis=0)
Out[194]: array([ 0.4,  0.6,  0.4])

现在生成一个像这样的布尔掩码:

In [195]: a.mean(axis=0) > .5
Out[195]: array([False,  True, False], dtype=bool)

获取平均值为>的列.5,使用布尔索引:

In [196]: a.T[a.mean(axis=0) > .5] # you'll need the transpose first
Out[196]: array([[1, 1, 1, 0, 0]])