當NumPy的使用切片,你會得到所有成對元素的索引列表,例如所有成對元素:使用索引這種行爲似乎並沒有列表/元組時NumPy的索引 -
>> im = np.arange(1,37).reshape((6, 6))
>> im[1:6:2,1:6:2]
array([[ 8, 10, 12],
[20, 22, 34],
[32, 34, 36]])
然而被遵循:
>> im[(1,3,5),(1,3,5)]
array([ 8, 22, 36])
>> im[[1,3,5],[1,3,5]]
array([ 8, 22, 36])
它只是取得對角線(在這種情況下)。如果您不能將索引指定爲切片,例如(1,3,4)
和(1,3,6)
,則這是有問題的。對於這兩個元組,我期望得到的所有元素都可以在(1,1) (1,3) (1,6) (3,1) ...
我想到的所有解決方法都包括充實每一對元素,這些元素在嘗試從大量圖像中提取大量元素時非常昂貴。在MATLAB中,im([1,3,5],[1,3,5])
做我想要的。我知道NumPy的索引中有很多技巧,我可能只是錯過了一些微妙之處。
作爲結論,例如變通方法:
im[np.meshgrid([1,3,5], [1,3,5], indexing='ij')]
im[zip(*itertools.product([1,3,5], [1,3,5]))].reshape((3,3))
你是對的,我原本在產生轉置的重塑命令中有'order ='F'。 – coderforlife