我试图做以下事情,只是误解了我错在哪里:
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., --]])
这里的要点是仅屏蔽第三列,因为它完全为零,并且将第一列保留为未屏蔽的
答案 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)
(也不需要循环。)