У меня есть два массива A,B
, и я хочу взять внешний продукт в их последнем измерении, например. result[:,i,j]=A[:,i]*B[:,j]
, когда A,B
двумерны.
Как я могу это сделать, если я не знаю, будут ли они двухмерными или трехмерными?
В моей конкретной задаче 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,...
Тип проблемы, с которой я имею дело, включает в себя двумерную пространственную сетку с векторной функцией в каждой точке сетки. Я хочу иметь возможность вычислять ковариационную матрицу (внешний продукт) этих векторов по областям, определенным срезами на первых двух осях.