0
我想選擇b
中的元素,條件是基於a
。但是,掩碼msk
並不完全捕獲輸出。下面給出的,改形/延伸numpy蒙版
>>> b = np.asarray([[[1, 11], [2, 12]], [[3, 13], [4, 14]], [[5, 15], [6, 16]], [[7, 17], [8, 18]]])
>>> b.shape
(4, 2, 2)
>>> b
array([[[ 1, 11],
[ 2, 12]],
[[ 3, 13],
[ 4, 14]],
[[ 5, 15],
[ 6, 16]],
[[ 7, 17],
[ 8, 18]]])
>>> a = np.asarray([[0, 2], [3, 0], [0, 6], [0, 8]])
>>> a.shape
(4, 2)
>>> a
array([[0, 2],
[3, 0],
[0, 6],
[0, 8]])
>>> msk = a > 0
>>> b[msk]
array([[ 2, 12],
[ 3, 13],
[ 6, 16],
[ 8, 18]])
>>> msk
array([[False, True],
[ True, False],
[False, True],
[False, True]], dtype=bool)
我想返回[[11, 12], [3, 4], [15, 16], [17, 18]]
,而不是什麼b[msk]
正在返回。直覺上,我認爲還需要在msk
中加入另一個維度,將其轉換爲b
的形狀,即(4, 2, 2)
,但只是調用msk.reshape
對我來說沒有任何幫助。我想用這樣的面具來解決問題。我怎樣才能轉換實際的面具?
>>> msk
array([[[False, True], [False, True]],
[[ True, False], [ True, False]],
[[False, True], [False, True]],
[[False, True], [False, True]]], dtype=bool)
我沒有做'hstack'體操,但得到它的工作 - 謝謝。你是否願意簡化你的解決方案到'transposed = np.transpose(b,(0,2,1));換位[MSK]'?這只是交換'b'的最後兩個維度。使用'轉置'應該也很快。 – orange 2015-03-13 08:24:45
@orange是的,當然。這甚至更好。 ;-) – 2015-03-13 08:27:37