Вычислить внешнее произведение массивов произвольной размерности

У меня есть два массива 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 с векторной -функцией со значениями в каждой точке сетки. Я хочу иметь возможность вычислить ковариационную матрицу (внешнего произведения )этих векторов по областям, определяемым срезами по первым двум осям.

8
задан Dave 24 July 2012 в 12:23
поделиться