在 matlab 中的 for 循环中堆叠 table 行
Stack table rows within for loop in matlab
我有一个 table 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
我在堆叠行时遇到错误。尝试了各种方法都没有成功。
解决方案
解决此问题的最佳方法是:
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
我有一个 table 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
我在堆叠行时遇到错误。尝试了各种方法都没有成功。
解决方案
解决此问题的最佳方法是:
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