python mask matrice用于选择顶点列表

时间:2017-03-08 13:35:54

标签: python numpy

我有一个布朗的numpy矩阵,其形状为(N,N),例如:

[[True False False True]
 [...]
 [True True True False]]

和一个numpy顶点数组,其形状为(N,3),例如:

[[0.1, 0.2, 0.3]
 [0.4, 0.5, 0.6]
 [0.7, 0.8, 0.9]
 [1.0, 1.1, 1.2]]

我想计算一个矩阵,其形状(N,变化),其中每一行是用布尔矩阵的每一行选择的顶点列表。 从上面的例子中可以看出:

[[[0.1, 0.2, 0.3], [1.0, 1.1, 1.2]]
 [...]
 [[0.1, 0.2, 0.3],[0.4, 0.5, 0.6],[0.7, 0.8, 0.9]]]

有可能吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

这是从掩码中提取行,列后的一种方法 -

r,c = np.where(mask)
start = np.r_[0,np.flatnonzero(r[1:] != r[:-1])+1]
stop = np.r_[start[1:], r.size]
data_rep = data[c]
out = [data_rep[start[i]:stop[i]] for i in range(len(start))]

答案 1 :(得分:0)

谢谢Divakar !! 我尝试了你的解决方案,它工作正常。

但是,我也尝试了一个带循环的解决方案:

result = []
for i in range(len(data)):
    result.append(data[mask[i]])

它比做起来快得多:

result = extract_rows_using_mask(data, mask)

奇怪的不是吗?