У меня есть двумерная матрица, A
, размера m x n, где n может быть очень большим числом (например, n> 10000), и многомерная матрица размера m x m x n. Итак, для каждого столбца i
в A
я хочу вычислить A[:,i]'*B[:,:,i]
. Ниже приведены коды, которые я пробовал с помощью функции трансляции в Джулии. Тем не менее, производительность моего кода довольно низкая. Мне интересно, можно ли улучшить производительность моего кода. Итак, кто-то имеет представление о том, как я могу улучшить коды?
using LinearAlgebra;
m = 500;
n = 20000; # this could be a very large number.
vecA = rand(m,n);
matB = rand(m,m,n);
combinedAB = Array{Array{Float64,2},2}(undef,n,1);
for ii in eachindex(combinedAB)
combinedAB[ii] = [vecA[:,ii] matB[:,:,ii]];
end
# this is the result.
res = broadcast(eAB -> dotProd(eAB), combinedAB);
function dotProd(matZ::Array{Float64,2})
return sum(broadcast(dot,matZ[:,1],matZ[:,2:end]),dims=1);
end