在matlab中的for循环内堆栈表行

时间:2018-01-24 15:15:06

标签: arrays matlab struct concat

我有一张桌子T = rand(8,3)。默认情况下选择第一行。如果满足条件,则选择连续的行。

T=rand(8,3)
Tn=T(1,:)
for i=1:size(T,1)
      if sum(T,2)<1.5
          Tn(i,:)=cat(1, Tn, T(i,:))
      end
end

我在堆叠行时遇到错误。尝试了各种方法但没有成功。

1 个答案:

答案 0 :(得分:4)

<强>解决方案

解决这个问题的最佳方法是:

Tn = T(sum(T,2) < 1.5,:)

请注意,该解决方案默认不会占用第一行。无论条件是否满足,如果您想要它,请使用:

Tn = T([1 ; sum(T(2:end,:),2)] < 1.5,:)

<强>结果

T =

0.8055    0.9787    0.5216
0.5767    0.7127    0.0967
0.1829    0.5005    0.8181
0.2399    0.4711    0.8175
0.8865    0.0596    0.7224
0.0287    0.6820    0.1499
0.4899    0.0424    0.6596
0.1679    0.0714    0.5186

sum(T,2) =

2.3058
1.3861
1.5015
1.5286
1.6686
0.8605
1.1919
0.7580

Tn =

0.5767    0.7127    0.0967
0.0287    0.6820    0.1499
0.4899    0.0424    0.6596
0.1679    0.0714    0.5186

如何使代码正常工作

要使代码正常工作,您需要修复if条件以及赋值行:

sumT = sum(T,2)
for i=1:size(T,1)
    if sumT(i)<1.5
        Tn = [Tn; T(i,:)];
    end
end