我有一个等式要计算,它看起来像这样:
F(a,b) = sum(c=1...n, a*b*c[i])
我可以这么算:
for a=
for b=
for c=
F(a,b)=F(a,b)+a*b*c
end
end
end
但是我听说,在大数组中,matlab在嵌套循环中会"冻结"。所以我可以这样做:
a=(1:n)';
b=1:n2;
Fs=a*b;
for c=
F=F+Fs*c;
end
但我想解决这个问题,没有任何可见的循环。所以我可以创建三个正交阵列a,b,cTensor积他们得到三维阵列,然后使用和函数的第三维。
a(:,1,1)=1:3;
b(1,:,1)=4:6;
c(1,1,:)=7:9;
d=tensorprod (a,b,2,1)
e=tensorprod (d,c);
但我在matlab中遇到了Tensor乘法问题。e
必须是3x3x3数组,但它是3x3x1x1x3数组。它是正确的,甚至
g=sum(e,5);
返回矩阵,但我不明白为什么第三维移到了第五维
3条答案
按热度按时间jv4diomz1#
我不确定无循环版本是否更好。使用广播(Matlab从Fortran和numpy中继承),您可以在没有循环的情况下完成,但我认为matlab的java JIT编译器在使用简单循环的情况下可以给予更好的结果,尽管如此,无循环版本可能
chy5wohz2#
根据您的循环,这应该会给予所需的总和。
eaf3rand3#
您可以使用向量和点积(内积)来执行此操作: