理解在MATLAB使用Python接口列表

17日视图(30天)
dleal
dleal 2022年7月25日
回答: 丹尼尔阿尔 2022年8月5日
你好,
使用MATLAB的Python接口,有办法理解列表在MATLAB ?
python列表理解样品问题:
list_1 = [foo (x)xL]% L = py.list ({1, 2, 3, 4});list_1 = [x + 1 x L);
(在我实际用例,L是一个列表的类,和foo()是getattr (L {2},“__dict“__”))。
我只能想到两种方式:
1)使用MATLAB for循环:
list_1 = py.list ();
2 = 1:int64 (py.len (L))
list1.append (foo (L {2}));
结束
这是缓慢的,因为在一个循环中调用的Python函数的开销。
2)定义一个Python函数模拟理解并导入MATLAB列表:
% sampleScript.py
deflist_compr (L):
返回(foo (x)xL]
%在matlab - - - - - - - - - - - -
list_1 = py.sampleScript.list_compr (L);
,我认为不是很灵活,因为我需要一个不同的函数列表理解略有不同。
你有什么建议吗?谢谢你!

答案(1)

丹尼尔阿尔
丹尼尔阿尔 2022年8月5日
MATLAB的 cellfun () arrayfun () 像Python列表理解。你可以给他们的Python函数作用于细胞或数组中的每一项。例如,如果 foo.py
deffoo (x):
返回2 * x
然后在MATLAB可以做
> > F = py.importlib.import_module (“foo”);
> > =二十29
20 21日22日23日24日25日26日27 28 29
> > list_l = arrayfun (@ (x) (F.foo (x)), a)
40 42 44 46 48 50 52 54 56 58
list_l 实际上是一个MATLAB矩阵,所以如果你想要一个Python列表需要转换,即
> > py.list (list_l)
Python和值列表:
(40.0,42.0,44.0,46.0,48.0,50.0,52.0,54.0,56.0,58.0)
使用字符串、双或细胞MATLAB函数转换为一个数组。

类别

找到更多的在从MATLAB调用Python帮助中心文件交换

标签

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!