2014-06-26 22 views
1

2天前刚刚启动MATLAB,我无法弄清楚一个非循环方法(因为我读了他们慢/低效,MATLAB有更好的选择)来执行一个简单的任务。 我有一个5列270行的矩阵。我想要做的是:MATLAB访问条件值并在单列中执行操作

如果一个元素的矩阵goodM的5列中的值低于90,我想利用这个元素,并从90

减去它到目前为止,我试过: test = goodM(:,5)< = 90;

goodM(test)= 999;

它将第1列中的所有goodM值都更改为999,另外此方法不允许我对第5列中的90以下的元素执行操作。任何优雅的解决方案都是这样的吗?

edit :: goodM(:,5)(test)= 999;似乎不工作,所以我不知道指定目标列。

回答

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 
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