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时,代码会起作用。