将matlab.double数组转换为python数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将matlab.double数组转换为python数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1564字,纯文字阅读大概需要3分钟。
内容图文
![将matlab.double数组转换为python数组](/upload/InfoBanner/zyjiaocheng/662/4f92094859b440819104009d186efca4.jpg)
我正在使用matlab python引擎从python中的matlab项目访问数据.这很好用,但是我在高效使用python中的matlab数组方面确实存在问题.例如,我要使用matlab的数组,我用了(eng代表matlab引擎):
x = eng.eval(arg)
我得到的是一个matlab.double数组,看起来像这样:
matlab.double([[1.0,2.0],[4.0,3.0],[2.0,5.0]])
看起来还不错.让我们尝试捕获一个条目:
>>> 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引擎.
解决方法:
我现在正在有效率地使用一种更通用的方法,该方法也允许我根据需要舍入值(但是请注意,舍入会花费更多的计算时间):
from math import log10, floor
def convert(self, x, ROUND=0):
conv = []
for _ in range(x.size[0]):
lst = x._data[_::x.size[0]].tolist()
if ROUND is not 0:
lst = [self.round_sig(elem, ROUND) if elem != 0 and
elem == elem else elem for elem in lst]
conv.append(lst)
return conv
def round_sig(self, x, sig=2):
return round(x, sig-int(floor(log10(abs(x))))-1)
内容总结
以上是互联网集市为您收集整理的将matlab.double数组转换为python数组全部内容,希望文章能够帮你解决将matlab.double数组转换为python数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。