【发布时间】:2015-03-09 17:25:17
【问题描述】:
A1、B1、C1、A2、B2 和 C2 是 6 矩阵,具有相同的维度 4435X2000。
我必须找到 i、j 和 k 的值,其中 A1(k,2000) == A2(i,j) 和 B1(k,2000) == B2(i,j) 和 C1(k,2000) == C2(i,j) 条件为 X(k)==1 和 Y(i,j)==1
目标是找到:counter、L、T和D
有没有办法让这段代码更快?我可以避免循环吗?
counter=0;
L(1)=0;
T(1)=0;
D(1)=0;
for k=1:4435
if X(k)==1 % X is a vector (4435x1)
F(k,:) = [A1(k,2000) B1(k,2000) C1(k,2000)]
for i=1:4435
for j=100:1999
if Y(i,j)==1 % Y is a matrix (4435x1999)
if F(k,:) == [A2(i,j) B2(i,j) C2(i,j)]
counter = counter+1;
L(counter)=k;
T(counter)=i;
D(counter)=j;
end
end
end
end
end
end
我想要一个至少能节省 80% 计算时间的解决方案! 并且没有错误消息:内存不足
【问题讨论】:
-
其中使用的变量的实际数据大小是多少?
-
@Divakar:对于 A1、A2、B1、B2、C1 和 C2:4435x2000
-
if F(k,:) ==可能不是if F(k,:) =?那是一个数组比较,而不是一个标量比较,对吧? -
@Daniel:是的,X 和 Y 支持向量化操作。
-
您可以用简单的英语解释一下代码在做什么,而不是向我们展示代码?这样,我们愿意做一些完全不同的事情,我们仍然可以实现您的主要目标。如果我们不局限于优化您的特定做事方法,我们还可以进一步优化您正在做的事情。
标签: performance matlab loops matrix runtime