假設以下代碼:
import numpy as np
x = np.random.random([2, 4, 50])
y = np.random.random([2, 4, 60])
z = [x, y]
z = np.array(z, dtype=object)
這給出了一個ValueError: could not broadcast input array from shape (2,4,50) into shape (2,4)
我可以理解為什么會發生此錯誤,因為兩個陣列的尾隨(最后一個)維度不同,并且 numpy 陣列無法存盤具有不同維度的陣列。
但是,我碰巧有一個 MAT 檔案,當它通過io.loadmat()函式 in在 Python 中加載時scipy,它包含np.ndarray具有以下屬性的 a:
from scipy import io
mat = io.loadmat(file_name='gt.mat')
print(mat.shape)
> (1, 250)
print(mat[0].shape, mat[0].dtype)
> (250,) dtype('O')
print(mat[0][0].shape, mat[0][0].dtype)
> (2, 4, 54), dtype('<f8')
print(mat[0][1].shape, mat[0][1].dtype)
> (2, 4, 60), dtype('<f8')
這讓我很困惑。該檔案中的陣列如何將mat[0]具有不同尾隨維度的 numpy 陣列作為物件保存,而np.ndarray我自己卻不能這樣做?
uj5u.com熱心網友回復:
當呼叫np.array嵌套陣列時,它無論如何都會嘗試堆疊陣列。請注意,您在這兩種情況下都在處理物件。這仍然是可能的。一種方法是首先創建一個空的物件陣列,然后填充值。
z = np.empty(2, dtype=object)
z[0] = x
z[1] = y
就像在這個答案中一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458982.html
