我有一個大小為(k,n,m)的NumPy int的ndarray A,代表了k個大小為nxm像素的影像。 我想把它轉換成一個大小為(k,)的dtype=object的ndarray B,其中包含每個大小為(n,m)的ndarrays的單獨影像。
我可以用for-loop來做(如下),但是有沒有更優雅/更直接的方法?
A = np.range(2*3*4) 。 reshape(2,3, 4)
B = np.empty(A.shape[0], dtype=object)
for i in range(0,A.shape[0] )。)
B[i] = A[i]
print(B)
array([array([0, 1, 2, 3],
[4, 5, 6, 7] 。
[8, 9, 10, 11]])。) array([[12, 13, 14, 15]。
[16, 17, 18, 19] 。
[20, 21, 22, 23]], dtype=object)
uj5u.com熱心網友回復:
你的陣列:
在[37]。A = np.range(2*3*4) 。 reshape(2,3, 4)
...:
...: B = np.empty(A.shape[0],dtype=object)
...: for i in range(0,A.shape[0] )。)
...: B[i] = A[i].
...:
在[38]。B
輸出[38]。
array([array([0, 1, 2, 3],
[4, 5, 6, 7] 。
[8, 9, 10, 11]])。) array([[12, 13, 14, 15]。
[16, 17, 18, 19] 。
[20, 21, 22, 23]], dtype=object)
另一種將A分配給B的方法。 更短,但不一定更快。
在[39]。B[:]=list(A)
在[40]中。B
輸出[40]。
array([array([0, 1, 2, 3],
[4, 5, 6, 7] 。
[8, 9, 10, 11]])。) array([[12, 13, 14, 15]。
[16, 17, 18, 19] 。
[20, 21, 22, 23]], dtype=object)
直接賦值不起作用,它必須是一個陣列的串列,而不是一個陣列:
直接賦值不起作用。
在[41]。B[:]=A
回溯(最近一次呼叫)。
檔案"<ipython-input-41-b3ca91787565>",行1,in<module>。
B[:]=A
ValueError: 可以not廣播input陣列from形狀(2。 3,4)轉化為形狀(2,)
另一個答案不可行:
在[42]: np.array([*A], dtype=object)
Out[42]。
array([[0, 1, 2, 3] 。
[4, 5, 6, 7] 。
[8, 9, 10, 11]】。]
[[12, 13, 14, 15] 。
[16, 17, 18, 19] 。
[20, 21, 22, 23]], dtype=object)
uj5u.com熱心網友回復:
你可以使用解包來代替,以獲得更干凈的代碼:
B = np.array([*A], dtype=object)
編輯:這并不奏效,因為內部元素也被變成了物件型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312769.html
標籤:
