Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Протестированный только в октаве... (никакая лицензия 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
Если 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
>>
Если я не ошибаюсь функция zip, Вы используете в Python, создает пару объектов, найденных в list1 и list2. В основном это все еще для цикла с дополнением, что это получит данные из двух отдельных списков для Вас, вместо этого что необходимо сделать это сами.
Таким образом, возможно, Ваш наилучший вариант состоит в том, чтобы использовать стандарт для цикла как это:
for i=1:length(a)
c(i) = a(i) + b(i);
end
или независимо от того, что Вы имеете отношение к данным.
Если Вы действительно говорите о параллельных вычислениях затем, необходимо смотреть на Панель инструментов Параллельных вычислений для matlab, и более конкретно в parfor
Я рекомендовал бы присоединиться к двум массивам для вычисления:
% assuming you have column vectors a and b
x = [a b];
for i = 1:length(a)
% do stuff with one row...
x(i,:);
end
Это будет работать отлично, если Ваши функции могут работать с векторами. С другой стороны много функций могут даже работать с матрицами, таким образом, Вам даже не был бы нужен цикл.
for
циклы в MATLAB раньше были медленными, но это больше не верно.
Так векторизация является не всегда решением для чуда. Просто используйте профилировщика, и tic
и toc
функции, чтобы помочь Вам определить возможные узкие места.