我正在使用matlabpython引擎访问python中的matlab项目中的数据。这很好地工作,但是在python中有效地使用matlab数组确实有一个问题。例如,我想要一个来自matlab的数组,我使用(eng代表matlab引擎):
x = eng.eval(arg)
我得到的是matlab.double数组如下所示:
^{pr2}$看起来还不错。让我们试着抓住一个条目:
>>> x[2][1]
5.0
耶!一整排怎么样?在
>>> x[0]
matlab.double([1.0,2.0])
。。好吧,至少是吵架了,但我没找到“matlab.double“”前缀。。专栏怎么样?在
>>> x[:][0]
matlab.double([1.0,2.0])
等等,什么?我尝试选择所有行,然后从每个行中选择第一个元素,但是我只得到行。事实上:
x[i] == x[:][i] == x[i][:]
所以,基本上有两个问题出现了:选一排给我带来了不想要的。”matlab.double“前缀和选择一个列(个人更重要)根本不起作用。有什么建议吗? 我现在所做的是重新读取每个值,并将其保存到一个新的python数组中:
c = [[] for _ in range(len(x[0]))]
for i in range(len(x[0])):
for j in range(len(x)):
c[i].append(x[j][i])
这是可行的,但有一个问题:随着数据的增长,代码的速度会大大减慢。当然,如果每个条目实际上已经存储在x中,那么重读它们并不是一件美妙的事
感谢您阅读了这篇长文本,我只是假设我解释了一点,因为可能只有少数人使用python matlab引擎。在
通过以下讨论,我设法找到了一个合理的方法:
这样,该命令需要大约0.009s,而不是之前的0.045s。使用zip函数大约是0.022s。非常感谢,现在代码运行速度快了5倍!在
为了澄清:
^{pr2}$x.size[i]
给出了matlab.double
数组的大小。x._data
给出一个一维数组类型:因此,它包含一个tolist()方法来获得一个实际的列表,这是我需要的。在
我现在正在高效地使用一种更通用的方法,它还允许我在需要时对值进行四舍五入(但是要小心,舍入需要更多的计算时间):
相关问题 更多 >
编程相关推荐