X = [67;89;78;56;55;75;99];
f = [4;5];
for i = 1:length(X);
if i == f;
X1(i,1) = 5*X(i,1);
else
X1(i,1) = X(i,1);
end
end
I know that the way i have written the if expression is wrong but can someone tell how do I write the if expression such that it uses the values of f.. basically if i equals the value in the f matrix or array the first formula is used else the second.
Thanks for help.
Sid

2 件のコメント

Stephen23
Stephen23 2016 年 2 月 25 日
編集済み: Stephen23 2016 年 2 月 25 日
There is absolutely no point in using a slow and ugly loop. Here is Walter Roberson's much better solution in full:
>> X = [67;89;78;56;55;75;99];
>> f = [4;5];
>> X1 = X;
>> X1(f) = 5 * X1(f)
X1 =
67
89
78
280
275
75
99
Siddharth Parmar
Siddharth Parmar 2016 年 2 月 25 日
I understand that it looks simple because I have modified my code and asked a simple question. Imagine if you have the array with 1000 rows in X and f. Then the loop simplifies it.

サインインしてコメントする。

 採用された回答

Arnab Sen
Arnab Sen 2016 年 2 月 25 日

1 投票

Hi Siddharth,
My understanding from your problem statement that you want to check whether the values of the variable 'i' is present in the vector 'f' in the if-statement. You can use in-built 'find' function for this purpose. 'find' function returns the indices of the vector which meet certain condition. If no match then it returns a empty vector. So you can write the if statement in the following way:
>>if(~isempty(f==i))
So, the whole script as below:
if true
% code
end
X = [67;89;78;56;55;75;99];
f = [4;5];
for i = 1:length(X);
%if i == f
if(~isempty(find(f==i)))
X1(i,1) = 5*X(i,1);
else
X1(i,1) = 1*X(i,1);
end
end
For more detail about 'find', refer to the following link:

2 件のコメント

Jos (10584)
Jos (10584) 2016 年 2 月 25 日
Use the single command any(..) rather than the three commands ~empty(find(..))
any(f==i)
Siddharth Parmar
Siddharth Parmar 2016 年 2 月 25 日
Thanks guys this is exactly what I was looking for.

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2016 年 2 月 25 日
編集済み: Stephen23 2016 年 2 月 25 日

2 投票

ismember(i, f)
Or, you can use
X1 = X;
X1(f) = 5 * X(f);
with no loop.

カテゴリ

ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by