MATLAB,嵌套For循环不在第二次迭代中工作
我有如下代码:MATLAB,嵌套For循环不在第二次迭代中工作,matlab,for-loop,nested-loops,Matlab,For Loop,Nested Loops,我有如下代码: clc; close all; clear all; k = 10; N = 50; f = 0.1; b = round(f*N); for x = 1:2 R = []; W = zeros(N,N); rand_vec = []; for i = 1:k+1 rand_vec = [ones(b,1); zeros(N-b,1)]; rand_vec = rand_vec(randperm(N)); T(:,i
clc; close all; clear all;
k = 10; N = 50; f = 0.1; b = round(f*N);
for x = 1:2
R = []; W = zeros(N,N); rand_vec = [];
for i = 1:k+1
rand_vec = [ones(b,1); zeros(N-b,1)];
rand_vec = rand_vec(randperm(N));
T(:,i) = rand_vec;
end
for c = 1:k
for r = 1:N
if T(r,c+1) == 1
ones = find(T(:,c));
W(ones,r) = W(ones,r) + 1;
end
end
W(find(W)) = 1;
end
for j = 1:k
RVT = T';
R = [R; RVT(j,:)*W];
end
R(find(R<5)) = 0;
R(find(R>=5)) = 1;
E = sum(length(find(R))-length(find(RVT(2:11,:))));
end
我真的不知道如何解决这个问题。当我设置x==1时,代码运行良好。代码的这一部分应该生成一个矩阵(N乘以k+1),其中包含随机间隔的0和1,频率为(f)。我认为,您的问题在于这一行:
ones = find(T(:,c));
您正在用一个变量覆盖MATLAB函数ones
。这意味着语句ones(b,1)
将被计算为变量(5,1)
,它将只获取ones
变量的第五个元素,而不是生成一个向量
有(至少)两种可能的解决方案:
变量
x
-循环的末尾,添加一行清除一行
我认为,你的问题在于这一行:
ones = find(T(:,c));
您正在用一个变量覆盖MATLAB函数ones
。这意味着语句ones(b,1)
将被计算为变量(5,1)
,它将只获取ones
变量的第五个元素,而不是生成一个向量
有(至少)两种可能的解决方案:
变量
x
-循环的末尾,添加一行清除一行
rand\u vect
以某种方式被生成为[46x1]
,randperm[N]
是[1x50]
,因此显然你无法通过randperm(N)
@adil访问rand\u vect
的47个及以上索引,在上面的一行中,我写了一条语句,我相信它生成了一个名为rand\u vec的50 x 1向量。我是不是误解了我的写作意图?当我移除循环变量x或将其设置为1时,代码会起作用。rand_vect
以某种方式生成为[46x1]
,randperm[N]
为[1x50]
,因此显然您无法通过randperm(N)
@adil访问rand_vect
的47个及以上索引,在上面的一行中,我写了一条语句,我相信它会生成一个50 x 1的向量,称为rand_vec。我是不是误解了我的写作意图?当我删除循环变量x或将其设置为1时,代码会起作用。