Directly perform a multiplication on certain variables in a table
8 ビュー (過去 30 日間)
古いコメントを表示
Hi,
I have a table such as
x y z
a 1 2
b 3 4
a 5 6
I want to multiply rows where the first column = b by 1000 but not touch the other rows.
I know I can get the values using a logical operatior
table.x == "b"
but I wasn't sure if I can use this logical operation to multiply the rows in place on the table without touching the other rows, without doing a for loop. My table has a lot of data so a for loop through each row is quite slow. Hence I am looking for a faster way than:
for i = 1:3
if table.x(i) == "b"
table.y(i)=table.y(i)*1000;
table.z(i)=table.z(i)*1000;
else
% do nothing
end
end
0 件のコメント
採用された回答
Stephen23
2021 年 11 月 25 日
編集済み: Stephen23
2021 年 11 月 25 日
T = cell2table({'a',1,2;'b',3,4;'a',5,6},'VariableNames',{'x','y','z'})
idx = strcmp(T.x,'b');
T{idx,{'y','z'}} = T{idx,{'y','z'}}*1000
Or alternatively:
T.y(idx) = T.y(idx)*1000;
T.z(idx) = T.z(idx)*1000;
1 件のコメント
Peter Perkins
2021 年 11 月 26 日
Even better if you can use the string type rather than a cell array of char vectors, because then
idx = strcmp(T.x,'b');
becomes the more readable
T.x == "b"
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!