我知道MATLAB有一个将2D矩阵存储在数组单元中的函数,但我如何在Python上做到这一点?我需要在1X5数组的每列中存储4X4个矩阵。这可能吗?感谢
我认为可以为每个4x4矩阵构建数组,并创建另一个矩阵,在其中可以引用5个不同的4x4矩阵。
a = np.array([[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]])
根据您的需求创建5个不同的数组,然后在一个数组中引用它们。
mat = np.block([[a],[b],[c],[d],[e]])
尝试类似的方法,你会发现你所期望的结果。请参阅数组和块形式numpy的文档。
虽然MATLAB矩阵接近numpy
数组,但cell
的等价物是不明确的。
一种选择是列表,尤其是当单元是(1,5(形状时,尺寸1的维度只是MATLAB的"1"的伪影;一切都是2d";。
另一个是对象数据类型数组。像列表一样,这样的数组的元素是对内存中其他对象的引用。这是scipy.io.loadmat
在加载MATLAB.mat文件时使用的。但是,创建这样的阵列可能很棘手,尤其是在所有组件阵列都具有相同形状的情况下。
另一种选择是制作高维阵列,例如(1,5,4,4(。曾经有一段时间,MATLAB只允许2d,但numpy
从一开始就允许这样做。请记住,在numpy
中,前导维度位于最外层(使用默认的"C"排序(。
In [407]: alist = [np.ones((2,2),int) for _ in range(3)]
In [408]: alist
Out[408]:
[array([[1, 1],
[1, 1]]),
array([[1, 1],
[1, 1]]),
array([[1, 1],
[1, 1]])]
In [409]: arr = np.array(alist)
In [410]: arr
Out[410]:
array([[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]]])
In [411]: arr.shape
Out[411]: (3, 2, 2)
In [412]: arr1 = np.empty(3, object)
In [413]: arr1
Out[413]: array([None, None, None], dtype=object)
In [414]: arr1[:] = alist
In [415]: arr1
Out[415]:
array([array([[1, 1],
[1, 1]]), array([[1, 1],
[1, 1]]),
array([[1, 1],
[1, 1]])], dtype=object)