2011-11-30 102 views
6

我正在寻找类似于matlab中的列表推导,但是我无法在纪录片中找到像这样的东西。matlab有没有像列表理解,因为它是在Python?

在Python中它会是这样的

A=[i/50 for i in range(50)] 
+2

您可能会觉得http://www.scipy.org/NumPy_for_Matlab_Users有用。请注意,在Numpy中,我可能会使用'A = np.arange(50)/ 50.0'来代替速度的列表理解。 – mtrw

+0

@mtrw很棒的链接。感谢 –

回答

10

Matlab是非常喜欢“矢量化”的。你会写你的例子:

A = (0:49) ./ 50 

Matlab讨厌循环,因此列出理解。这就是说,看看arrayfun函数。

+2

MATLAB * hates * loops?不要这样想。它只是为你提供其他的做事方式。结果,你最终会恨他们。 – ktdrv

+1

我最终讨厌在MATLAB中编写循环,而不是一般循环。我和我的MATLAB已经经历了很多......如果软件可以有任何移情,它现在也会讨厌循环。 –

+0

值得指出的是,这是matlab和python相似的地方。 Python在循环方面也很慢(与像C这样的编译语言相比),并且如果计算时间很重要,您应该尝试在python中尽可能矢量化,通常使用numpy。 – Caleb

2

没有,MATLAB没有列表内涵。你真的不需要它,因为重点应该放在阵列级的计算:

A = (1:50)/50 
-1

Matlab的可直接与阵列工作,使列表理解的有用

0

如果你想要做的是为样本微不足道,你可以简单地做一个标量鸿沟:

A = (0:50) ./ 50 
5

你可以这样做:

(1:50)/50 

或者更多的东西一般,你可以这样做:

[email protected](x) (x/50); 
arrayfun(f,1:50) 
0

有几种方法可以在Matlab中生成一个列表,从0到49/50 1/50

A = (0:49)/50 

B = 0:1/50:49/50 

C = linspace(0,49/50,50) 

编辑萨姆·罗伯茨在发言:在评论中指出,即使所有这些名单应该是等价的,计算结果是由于浮点错误是不同的。例如:

max(abs(A-B)) 
ans = 
    1.1102e-16 
+1

A的这些值都不相同!尝试将它们称为A,B和C并将它们与所有(A == B)进行比较。在冒号,双冒号和linspace的不同行为中进行有趣的练习。我对Python一无所知,但如果这个线程中的某个人能够将这三个MATLAB选项与Python列表理解进行比较,那么它可能会很有用。编辑:删除我的-1,我不是故意听起来很关键,这是一个很好的答案。 –

+0

@SamRoberts:这是一个很好的观点。即使在理论上,所有的解决方案都应该是等价的,但由于浮点错误,其结果并不完全相同。 – Jonas

+0

为了让人们理解我以前的评论 - @Jonas最初称他所有的变量A,B和C只是A.在编辑之后,他的答案现在更清晰了,但是我的评论没有多少意义...... –

相关问题