Hap*_*yPy 5 python matlab scipy
我正在尝试在python中创建一个Matlab单元格数组并将其保存为.mat文件,但是当所有单元格包含2个值时遇到问题:
import scipy.io as sio
twoValues = {'a': array([[array([[2, 2]]), array([[3, 3]])]])}
sio.savemat('test.mat',twoValues)
Run Code Online (Sandbox Code Playgroud)
在Matlab中:
load('test.mat')
>>> a
a(:,:,1,1) =
2 3
a(:,:,1,2) =
2 3
>>> class(a)
ans =
int32
Run Code Online (Sandbox Code Playgroud)
回到python:
threeValues = {'a': array([[array([[2, 2, 2]]), array([[3, 3]])]])}
sio.savemat('test.mat',threeValues)
Run Code Online (Sandbox Code Playgroud)
在Matlab中:
>>> a
a =
[3x1 int32] [2x1 int32]
>>> class(a)
ans =
cell
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
ask*_*han 10
当你这样做:
a = np.array([[np.array([[2, 2]]), np.array([[3, 3]])]])
Run Code Online (Sandbox Code Playgroud)
np.array实际连接内部两个的最后调用,所以最后得到一个数组:
>>> a
array([[[[2, 2]],
[[3, 3]]]])
>>> a.shape
(1, 2, 1, 2)
Run Code Online (Sandbox Code Playgroud)
但是要模仿一个单元格数组,你想要基本上有一个数组数组.您可以通过设置来实现此目的dtype=object,但必须创建数组并单独设置元素以避免自动合并.
three = array([[array([[2, 2, 2]]), array([[3, 3]])]])
two = np.empty(three.shape, dtype=object)
two[0,0,0] = np.array([[2,2]])
two[0,1,0] = np.array([[3,3]])
Run Code Online (Sandbox Code Playgroud)
然后:
sio.savemat('two.mat', {'two': two})
Run Code Online (Sandbox Code Playgroud)
看看它们的样子:
>>> two
array([[[array([[2, 2]])],
[array([[3, 3]])]]], dtype=object)
>>> two.shape
(1, 2, 1)
Run Code Online (Sandbox Code Playgroud)
请注意,我可能已经对你想要的形状感到困惑,因为你有很多嵌套的括号,所以你可能不得不重塑其中的一些,但这个想法应该保持不变.
| 归档时间: |
|
| 查看次数: |
14311 次 |
| 最近记录: |