當有拼圖時,打印中間值。更好的是,在交互式shell中運行測試用例,以便檢查每個值,並瞭解發生了什麼。跟蹤形狀。
貌似labels
是數字的一維數組,如:
In [212]: labels=np.array([0,1,2,2,3,2,0,3,2])
指標,其中labels
是2或3:
In [213]: num2=np.nonzero(labels==2)
In [214]: num2
Out[214]: (array([2, 3, 5, 8], dtype=int32),)
In [215]: num3=np.nonzero(labels==3)
這裏有一個關鍵步驟 - 什麼是transpose
目的。請注意0是一個具有一個1d陣列的元組。
In [216]: num2=np.transpose(num2)
In [217]: num3=np.transpose(num3)
In [218]: num2
Out[218]:
array([[2],
[3],
[5],
[8]], dtype=int32)
轉置num2
之後是一個列陣列,(4,1)的形狀。
連接它們垂直地產生一個(6,1)陣列:
In [220]: num=np.vstack([num2,num3])
In [221]: num
Out[221]:
array([[2],
[3],
[5],
[8],
[4],
[7]], dtype=int32)
In [222]: num.shape
Out[222]: (6, 1)
In [223]: labels[num]
Out[223]:
array([[2],
[2],
[2],
[2],
[3],
[3]])
In [224]: labels[num].shape
Out[224]: (6, 1)
索引與該陣列的一維陣列產生相同的形狀索引的另一個陣列。索引x[num,:]
做同樣的事情,但增加了最後一個維度。
如果我索引(3,4)陣列與所述第一尺寸的(2,5)排列,其結果是一個(2,5,4)陣列:
In [227]: np.ones((3,4))[np.ones((2,5),int),:].shape
Out[227]: (2, 5, 4)
您說最後一行是罪魁禍首,但你沒有向我們展示'ind'是什麼。你的意思是把'num'放在那裏?如果你能包含完整的代碼,我們可以通過簡單地將其從問題中複製出來,這是最好的。 –
我認爲這裏的邏輯被破壞了:你應該已經將'numpy.nonzero'調用的結果分配給'indN',而不是'numN'。 – ForceBru
您可以創建一個[mcve]嗎?在我們可以幫助您解決問題之前,瞭解這些陣列的形狀非常重要... – Praveen