具有不同最后轴维度元素的 Numpy 数组
Numpy array with elements of different last axis dimensions
假设以下代码:
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 文件,当通过 scipy
中的 io.loadmat()
函数加载到 Python 时,它包含一个具有以下属性的 np.ndarray
:
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
本身,而我自己却做不到?
在嵌套数组上调用 np.array
时,无论如何都会尝试堆叠数组。请注意,在这两种情况下,您都在处理对象。这仍然是可能的。一种方法是先创建一个空的对象数组,然后填充值。
z = np.empty(2, dtype=object)
z[0] = x
z[1] = y
Like in this answer.
假设以下代码:
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 文件,当通过 scipy
中的 io.loadmat()
函数加载到 Python 时,它包含一个具有以下属性的 np.ndarray
:
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
本身,而我自己却做不到?
在嵌套数组上调用 np.array
时,无论如何都会尝试堆叠数组。请注意,在这两种情况下,您都在处理对象。这仍然是可能的。一种方法是先创建一个空的对象数组,然后填充值。
z = np.empty(2, dtype=object)
z[0] = x
z[1] = y
Like in this answer.