2天前刚开始使用MATLAB,我无法弄清楚一个非循环方法(因为我读它们很慢/效率低,MATLAB有更好的选择)来执行一个简单的任务。 我有一个5列和270行的矩阵。我想做的是:
如果矩阵goodM的第5列中元素的值低于90,我想取该元素并从90减去它。
到目前为止,我尝试过: test = goodM(:,5)< = 90;
goodM(test)= 999;
它将第1列中的所有goodM值而不是5更改为999,此外,此方法不允许我对第5列中90以下的元素执行操作。任何优雅的解决方案都可以执行此操作?
edit :: goodM(:,5)(test)= 999;似乎没有工作,所以我不知道指定目标列。
答案 0 :(得分:2)
我假设您希望在问题中的文字读取时操作值低于90的元素,而不是代码中使用的'below or equal to'
表示的'<='
。试试这个 -
ind = find(goodM(:,5) < 90) %// Find indices in column 5 that have values less than 90
goodM(ind,5) = 90 - goodM(ind,5) %// Operate on those elements using indices obtained from previous step
答案 1 :(得分:0)
试试这段代码:
b=90-a(a(:,5)<90,5);
例如:
a =
265 104 479 13 176
26 110 447 208 144
379 163 179 366 464
301 48 274 391 26
429 374 174 184 297
495 375 312 373 82
465 272 399 447 420
205 170 373 122 84
1 417 63 65 252
271 277 412 113 500
然后,
b=90-a(a(:,5)<90,5);
b =
64
8
6