有没有办法减少a-b';matlab中的相关运算,其中a和b是大列向量?

有没有办法减少a-b';matlab中的相关运算,其中a和b是大列向量?,matlab,Matlab,我试图做一个类似的操作:(exp((a-b').^2)*(diag(c)*d)),其中a、b、c和d是列向量。a和b的大小很大,因此a-b'超出了MATLAB中矩阵大小的最大限制。然后我将其转换为一个循环,循环遍历a的每个值: d=0(长度(a),1); 对于i=1:长度(a) d(i)=(exp((a(i)-b').^2)*(c.*d)); 结束 这使得代码需要很长时间才能运行,因为此操作需要大量调用。有什么方法可以减少这项工作所需的时间吗?这是一项昂贵的操作,可能没有太多机会加快这项工作。

我试图做一个类似的操作:
(exp((a-b').^2)*(diag(c)*d))
,其中
a
b
c
d
是列向量。
a
b
的大小很大,因此
a-b'
超出了MATLAB中矩阵大小的最大限制。然后我将其转换为一个循环,循环遍历
a的每个值:

d=0(长度(a),1);
对于i=1:长度(a)
d(i)=(exp((a(i)-b').^2)*(c.*d));
结束

这使得代码需要很长时间才能运行,因为此操作需要大量调用。有什么方法可以减少这项工作所需的时间吗?

这是一项昂贵的操作,可能没有太多机会加快这项工作。使用
sum
,而不是乘以
one(…)
。设置
a=rand(5,1);b=兰特(5,1);c=兰特(5,1)它不起作用。因为你用
diag(c)
做点积,它在对角线上只有非零元素,你对exp(a-b')的大部分计算都是浪费的。您只需计算该矩阵的对角线,即
exp((a-b)。^2)
,然后与
c
相乘。换句话说,前两个术语中的非零对角线,即,
(exp((a-b')。^2)。*diag(c))
,可以使用
exp((a(:)-b(:)。^2)。*c(:)
我会尝试使用sum,谢谢。c是行向量,抱歉问题中的错误