Matlab Есть ли что-то вроде понимания списка, как в Python? - PullRequest
7 голосов
/ 30 ноября 2011

Я ищу что-то вроде списочного понимания в Matlab, но я не смог найти ничего подобного в документальном фильме.

В питоне это будет что-то вроде

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

Ответы [ 6 ]

11 голосов
/ 30 ноября 2011

Матлаб очень любит «векторизацию».Вы бы написали свой пример следующим образом:

A = (0:49) ./ 50

Matlab ненавидит циклы и, следовательно, понимает список.Тем не менее, взгляните на функцию arrayfun.

5 голосов
/ 30 ноября 2011

Вы можете сделать:

(1:50)/50

Или для чего-то более общего, вы можете сделать:

f=@(x) (x/50);
arrayfun(f,1:50)
2 голосов
/ 30 ноября 2011

Нет, у Matlab нет списочных представлений.Вам это действительно не нужно, поскольку основное внимание должно быть уделено вычислениям на уровне массива:

A = (1:50) / 50
0 голосов
/ 30 ноября 2011

Существует несколько способов создания списка в 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
0 голосов
/ 30 ноября 2011

Если то, что вы пытаетесь сделать, так же тривиально, как пример, вы можете просто сделать скалярное деление:

A = (0:50) ./ 50
0 голосов
/ 30 ноября 2011

Matlab может работать с массивами напрямую, что делает понимание списка менее полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...