为了账号安全,请及时绑定邮箱和手机立即绑定

在 Matlab 中保存矢量文件并在 Python 中放入数组

在 Matlab 中保存矢量文件并在 Python 中放入数组

元芳怎么了 2023-09-12 17:22:30
我在 Matlab 中保存了一个包含矢量信息的文件:x = [1 2 3 4 5 6 7 8 9 10]在此处输入链接描述https://www.dropbox.com/s/lxq66hlo9p37ad2/test.mat?dl=0我如何在Python中读取这个文件以获得数组中相同的向量x?我试过这个:from scipy.io import loadmatx = scipy.io.loadmat('test.mat')print (x[0])但它似乎只是读取文件而不放入数组。如果我print x[0]有一个错误。Traceback (most recent call last):  File "/home/mateus/Desktop/test.py", line 16, in <module>    print (x[0])KeyError: 0>>> 
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

当您在 MATLAB 中保存数据时,它保存到文件中的是包含所有变量的工作区。您可以限制保存哪些变量,但即使在这种情况下,它也会保存为包含指定变量的工作区。

这意味着,即使test.mat其中只有 MATLAB 中的变量“x”,当您test.mat在 python 中加载时x = scipy.io.loadmat('test.mat'),您也不会只得到“x”作为 NumPy 数组。如果你写,print(type(x))你会发现它实际上是一本字典。这就是为什么你有一个KeyError例外。这本字典里没有任何东西0作为键。

您需要在 MATLAB 中指定原始变量的名称(在本例中也是“x”)才能获取实际的数组。

那是,

x = scipy.io.loadmat('test.mat')
print(x["x"])

印刷

[[ 1  2  3  4  5  6  7  8  9 10]]

这是一个 2D NumPy 数组,表示一个行十列的矩阵。


最后一点,请记住 MATLAB 中的向量是“列向量”,这意味着它们的维度为1xn。毕竟 MATLAB 喜欢将一切都视为矩阵。在 NumPy 中,向量是实际的一维数组,但由于数据来自 MATLAB,因此当您在 Python 中加载数据时会得到一个二维数组。


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信