Matlab 通过减少代码行复制数据 计数器=1; 因为i=1:50, 如果y(i)L Y(计数器)=[Y(i)];%将数据从Materialx y复制到y 计数器=计数器+1; 结束 结束

Matlab 通过减少代码行复制数据 计数器=1; 因为i=1:50, 如果y(i)L Y(计数器)=[Y(i)];%将数据从Materialx y复制到y 计数器=计数器+1; 结束 结束,matlab,Matlab,我的问题是: 有没有办法减少代码行数,并使用一些东西来代替“计数器”来实现相同的想法 注意:U和L是数字。使用逻辑索引 counter=1; for i=1:50, if y(i)<U && y(i)>L Y(counter)=[y(i)]; % To copy the data from materix y to Y counter=counter+1; end end 创建一些随机值。我

我的问题是:

有没有办法减少代码行数,并使用一些东西来代替“计数器”来实现相同的想法


注意:
U
L
是数字。

使用逻辑索引

counter=1;
for i=1:50,
    if y(i)<U && y(i)>L
        Y(counter)=[y(i)];               % To copy the data from materix y to Y
        counter=counter+1;
    end
end
创建一些随机值。我把它乘以100,得到一个更大的范围

U=50;
L =  1;
应用逻辑索引

A=rand(1,10).*100
A =

Columns 1 through 9:

92.3313   32.6929   33.4143   21.4837   71.6719   30.4625    7.5700   57.0943    6.4849

Column 10:

28.0583

假设K=find(ismember(A,B)==1);结果是2,3,4,6,7,9,10,那么我想在矩阵G中取这些索引,我可以写G=G(find(ismember(A,B)==1))吗我知道这是不正确的,但是你能纠正我吗为什么不正确?你试过了吗?如果运行
G(find(ismember(A,B)==1))
,您会得到什么?试试看……索引超过了矩阵维数。这意味着
长度(G)
<10。我无法真正为您调试代码,因为我没有您所有的代码/数据。本质上,您必须将代码分解为最小的位,查看每个步骤的输出,然后使语句更复杂。G的长度与A的长度相似
B=A(A<U & A>L)
B =

32.6929   33.4143   21.4837   30.4625    7.5700    6.4849   28.0583
find(ismember(A,B)==1)

ans =

    2    3    4    6    7    9   10