У меня есть два массива A,B
и я хочу взять внешний продукт в их последнем измерении, например result[:,i,j]=A[:,i]*B[:,j]
когда A,B
являются 2 -мерными.
Как я могу это сделать, если я не знаю, будут ли они двухмерными или трехмерными?
В моей конкретной задаче A,B
есть срезы большего трехмерного -массива Z
, Иногда это может быть вызвано целыми индексами A=Z[:,1,:], B=Z[:,2,:]
, а иногда со срезами A=Z[:,1:3,:],B=Z[:,4:6,:]
. Поскольку scipy «сжимает» одноэлементные размеры, я не буду знать, какие размеры моих входных данных будет.
Массив -внешний -продукт, который я пытаюсь определить, должен удовлетворять
array_outer_product( Y[a,b,:], Z[i,j,:] ) == scipy.outer( Y[a,b,:], Z[i,j,:] )
array_outer_product( Y[a:a+N,b,:], Z[i:i+N,j,:])[n,:,:] == scipy.outer( Y[a+n,b,:], Z[i+n,j,:] )
array_outer_product( Y[a:a+N,b:b+M,:], Z[i:i+N, j:j+M,:] )[n,m,:,:]==scipy.outer( Y[a+n,b+m,:], Z[i+n,j+m,:] )
для любого ранга -3 массива Y,Z
и целых чиселa,b,...i,j,k...n,N,...
Проблема, с которой я имею дело, связана с пространственной сеткой 2 -D с векторной -функцией со значениями в каждой точке сетки. Я хочу иметь возможность вычислить ковариационную матрицу (внешнего произведения )этих векторов по областям, определяемым срезами по первым двум осям.