Перекрестное произведение многомерных массивов
У меня есть два вектора а также каждая из них имеет три координаты которые имеют размеры 80x80x2000.
Я хочу вычислить перекрестное произведение в MATLAB этих двух векторов для каждого момента времени. Я знаю, что могу извлекать индивидуальные координаты во вложенных циклах, но возможно ли сделать так, чтобы избежать циклов? вот пример кода с циклами
m1x = cat(3, [1 2; 3 4], [5 6; 7 8]);
m1y = cat(3, [9 10; 11 12], [13 14; 15 16]);
m1z = cat(3, [17 18; 19 20], [21 22; 23 24]);
m2x = cat(3, [5 6; 2 6], [1 3; 7 9]);
m2y = cat(3, [6 7; 3 5], [2 11; 2 6]);
m2z = cat(3, [3 9; 0 1], [4 2; 3 15]);
result_x(2,2,2)=0; result_y(2,2,2)=0; result_z(2,2,2)=0;
for t=1:2
for i=1:2
for j=1:2
a = [m1x(i,j,t); m1y(i,j,t); m1z(i,j,t);];
b = [m2x(i,j,t); m2y(i,j,t); m2z(i,j,t);];
c = cross(a,b);
result_x(i,j,t) = c(1);
result_y(i,j,t) = c(2);
result_z(i,j,t) = c(3);
end;
end;
end;
итак, у меня есть три компонента x,y и z результирующего вектора для каждого момента времени
1 ответ
Например, если у вас есть матрицы A
а также B
так, что у каждого есть t (время) строк и 3 столбца (x, y, z) или, если вы можете изменить их форму для получения этой конфигурации, вы можете использовать:
C=cross(A,B);
и каждый ряд т в C
будет перекрестным произведением соответствующих строк в A
а также B
, Пример:
>> A=[rand(2000,1),rand(2000,1),rand(2000,1)];
>> B=[rand(2000,1),rand(2000,1),rand(2000,1)];
>> C=cross(A,B);
>> C(1,:)
ans =
0.0090 -0.0435 0.0756
>> cross(A(1,:),B(1,:))
ans =
0.0090 -0.0435 0.0756