有時在創建新的二維陣列時,我最終會使用嵌套陣列而不是正確的多維陣列。這會導致一些復雜情況,例如誤導性array.shape值。
我的意思是我最終得到
array([array([...]), array([...])], dtype=object)
當我想要
array([[...], [...]])
我不確定我的代碼中的哪一點會導致前一種情況。我想知道 1. 什么是避免獲取此類陣列的好做法,以及 2. 任何實用的修復以將其恢復為多維形式。
關于后者,執行
np.array([list(i) for i in nested_array])
有效,但似乎不實用,尤其是在維度更高的情況下。
uj5u.com熱心網友回復:
如果您有一個陣列陣列,例如:
import numpy as np
arr1 = np.empty(3,object)
arr1[:] = [np.arange(3), np.arange(3, 6), np.arange(6, 9)]
repr(arr1)
結果:
array([array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])], dtype=object)
注意dtype那里。這可能會給您帶來一些麻煩,請比較:
arr2 = np.array([np.arange(3), np.arange(3, 6), np.arange(6, 9)])
print(arr2)
print(arr2.dtype)
結果:
[[0 1 2]
[3 4 5]
[6 7 8]]
int32
像 一樣變成arr1一個陣列 arr2,這就是您要問的:
arr3 = np.stack(arr1)
print(arr3)
print((arr2 == arr3).all())
結果:
[[0 1 2]
[3 4 5]
[6 7 8]]
True
因此,請確保您的陣列具有您需要的資料型別,如果您無法避免以陣列陣列結尾,請將它們與numpy.stack().
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453056.html
