掩盖numpy.array中的零列

时间:2018-01-22 21:26:01

标签: python numpy

我试图做以下事情,只是误解了我错在哪里:

In: import numpy as np

In: a  = np.array([[0., 1., 0.],
             [1., 2., 0.],
             [0., 3., 0.]]) 

In: for i in range(a.shape[1]):
        a[:, i] = np.ma.masked_where(~a[:, i].any(), a[:, i])

Out: array([[0., 1., --],
     [1., 2., --],
     [0., 3., --]])

这里的要点是仅屏蔽第三列,因为它完全为零,并且将第一列保留为未屏蔽的

2 个答案:

答案 0 :(得分:0)

基于列中所有零进行掩码的一种方法是简单地识别列 sums 为零。下面是我的解决方案,大量借用this SO answer来提供一个简单的屏蔽机制,在你获得感兴趣的列索引之后。

import numpy as np    

def mask_zero_cols(in_array):
    # idx is an array of column indices for all-zero columns
    idx = np.where(in_array.sum(axis=0) == 0)[0] #axis=0 is for columns
    m = np.zeros_like(in_array)
    m[:, idx] = 1

    return np.ma.masked_array(in_array, m)


a = np.array([[0., 1., 0.],
             [1., 2., 0.],
             [0., 3., 0.]])

a_mask = mask_zero_cols(a)

答案 1 :(得分:0)

您无法反转(~)浮点数和数组。

尝试:

a = np.ma.masked_where(np.isclose(a, 0), a)

(也不需要循环。)