我有一个布朗的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]]]
有可能吗?
提前致谢
答案 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)
奇怪的不是吗?