【发布时间】:2019-11-04 09:37:30
【问题描述】:
我有以下代码:
N=8;
K=10;
a=zeros(1,N^(K-1));
b=zeros(1,N^(K-1));
for ii=1:K
p0{ii}=rand(1,N);
p1{ii}=rand(1,N);
end
k=1;
for j1=1:N
for j3=1:N
for j4=1:N
for j5=1:N
for j6=1:N
for j7=1:N
for j8=1:N
for j9=1:N
for j10=1:N
a(k)=p0{1}(j1)*p0{3}(j3)*p0{4}(j4)*p0{5}(j5)*p0{6}(j6)*p0{7}(j7)*p0{8}(j8)*p0{9}(j9)*p0{10}(j10);
b(k)=p1{1}(j1)*p1{3}(j3)*p1{4}(j4)*p1{5}(j5)*p1{6}(j6)*p1{7}(j7)*p1{8}(j8)*p1{9}(j9)*p1{10}(j10);
k=k+1;
end
end
end
end
end
end
end
end
end
我无法为N=8 评估此代码,因为它需要很多时间。 p0 和 p1 是大小为 KxN 的矩阵。嵌套的for循环省略了p0和p1的一行,这里第二行对应索引j2。其余的矩阵元素相互相乘。所以总共有N^(K-1) 乘法以获得向量a 和b。
有没有办法在不使用 for 循环的情况下或至少在某个合理的时间内完成这件事?
【问题讨论】:
-
p0和p1是单元格重要吗? -
@Irreducible 是和否。一般来说是的,因为N实际上可能是N1,N2,..等,对于每个循环来说都是不同的,因为大多数情况下N是固定的,并且单元格可以被视为大小为K的矩阵由 N.
-
让我们假设 N 是固定的,而不是看起来你想要选择从向量 (1:N) 中提取的 K 个元素的排列,并重复。 (代表感兴趣的行来计算您的产品)
标签: matlab for-loop simplification