Параллельные обходы могут быть сделаны в MATLAB так же, как в Python?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

11
задан AlessioX 20 February 2016 в 21:06
поделиться

5 ответов

Протестированный только в октаве... (никакая лицензия matlab). Изменения arrayfun () существуют, проверяют документацию.

dostuff = @(my_ten, my_one) my_ten + my_one;

tens = [ 10 20 30 ];
ones = [ 1 2 3];

x = arrayfun(dostuff, tens, ones);

x

Урожаи...

x =

   11   22   33
6
ответ дан 3 December 2019 в 03:54
поделиться

Если X и Y являются векторами - столбцами, можно сделать:

for i=[x';y']
# do stuff with i(1) and i(2)
end

(с векторами - строками просто используйте x и y).

Вот выполненный пример:

>> x=[1 ; 2; 3;]

x =

     1
     2
     3

>> y=[10 ; 20; 30;]

y =

    10
    20
    30

>> for i=[x';y']
disp(['size of i = ' num2str(size(i)) ', i(1) = ' num2str(i(1)) ', i(2) = ' num2str(i(2))])
end
size of i = 2  1, i(1) = 1, i(2) = 10
size of i = 2  1, i(1) = 2, i(2) = 20
size of i = 2  1, i(1) = 3, i(2) = 30
>> 
15
ответ дан 3 December 2019 в 03:54
поделиться

Если я не ошибаюсь функция zip, Вы используете в Python, создает пару объектов, найденных в list1 и list2. В основном это все еще для цикла с дополнением, что это получит данные из двух отдельных списков для Вас, вместо этого что необходимо сделать это сами.

Таким образом, возможно, Ваш наилучший вариант состоит в том, чтобы использовать стандарт для цикла как это:

for i=1:length(a)
  c(i) = a(i) + b(i);
end

или независимо от того, что Вы имеете отношение к данным.

Если Вы действительно говорите о параллельных вычислениях затем, необходимо смотреть на Панель инструментов Параллельных вычислений для matlab, и более конкретно в parfor

6
ответ дан 3 December 2019 в 03:54
поделиться

Я рекомендовал бы присоединиться к двум массивам для вычисления:

% assuming you have column vectors a and b
x = [a b];

for i = 1:length(a)
    % do stuff with one row...
    x(i,:);
end

Это будет работать отлично, если Ваши функции могут работать с векторами. С другой стороны много функций могут даже работать с матрицами, таким образом, Вам даже не был бы нужен цикл.

1
ответ дан 3 December 2019 в 03:54
поделиться

for циклы в MATLAB раньше были медленными, но это больше не верно.

Так векторизация является не всегда решением для чуда. Просто используйте профилировщика, и tic и toc функции, чтобы помочь Вам определить возможные узкие места.

-2
ответ дан 3 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: