答案 0 :(得分:2)
从某种意义上说,Python的'单元'比MATLAB更长 - list
。 python列表是1d单元格的直接替代品(或者更确切地说,是1维大小的单元格)。可以将2d单元表示为嵌套列表。带有dtype对象的numpy
数组也可以工作。我相信scipy.io.loadmat
用于在.mat文件中呈现单元格。
np.array()
将列表或列表等转换为ndarray
。有时它需要帮助指定dtype。它还尝试将输入呈现为尽可能高的维数。
np.array([1,2,3])
np.array(['1',2,'abc'],dtype=object)
np.array([[1,2,3],[1,2],[3]])
np.array([[1,2],[3,4]])
MATLAB结构映射到Python词典或对象。
http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html
loadmat
也可以将结构表示为numpy结构(记录)数组。
np.concatenate
有一个数组列表及其便利衍生物vstack
,hstack
,dstack
。大多数情况下,他们调整数组的大小,然后在一个轴上连接。
这是MATLAB cell2mat示例的粗略近似值:
C = {[1], [2 3 4];
[5; 9], [6 7 8; 10 11 12]}
构造具有相同形状的ndarray
In [61]: c11=np.array([[1]])
In [62]: c12=np.array([[2,3,4]])
In [63]: c21=np.array([[5],[9]])
In [64]: c22=np.array([[6,7,8],[10,11,12]])
使用hstack
和vstack
的组合加入它们 - 即沿着匹配的轴连接。
In [65]: A=np.vstack([np.hstack([c11,c12]),np.hstack([c21,c22])])
# or A=np.hstack([np.vstack([c11,c21]),np.vstack([c12,c22])])
制造
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
或更普遍(紧凑)
In [75]: C=[[c11,c12],[c21,c22]]
In [76]: np.vstack([np.hstack(c) for c in C])
答案 1 :(得分:1)
我通常使用对象数组来代替Matlab的单元数组。例如:
cell_array = np.array([[np.arange(10)],
[np.arange(30,40)] ],
dtype='object')
是一个2x1对象数组,包含10个numpy数组向量。我可以通过以下方式执行cell2mat
功能:
arr = np.concatenate(cell_array).astype('int')
返回2x10 int数组。您可以将.astype('int')
更改为您需要的任何数据类型,或者您可以从cell_array中的一个对象中获取它,
arr = np.concatenate(cell_array).astype(cell_array[0].dtype)
祝你好运!