how to generate new matrix with if statment

2 ビュー (過去 30 日間)
Ibrahim AlZoubi
Ibrahim AlZoubi 2020 年 5 月 17 日
コメント済み: Walter Roberson 2020 年 5 月 17 日
I have two matrices first one is:
test = [5;6;0;-1;0;5;0;6;0;8];
and the second one is:
test5 = [2;6;8;-1;0;7;8;6;8;8];
how to generate third matrix which is the result after the condition (if statment)...
the condition is if the value of test is equal 0 then the value of the new matrix is 0 , else if the value of the first matrix isn't equal 0 do some calculations on the second matrix which is test5 like (test5*7+5).
so the third matrix values depends on the two matrix before...

採用された回答

Stanislao Pinzón
Stanislao Pinzón 2020 年 5 月 17 日
Maybe like this?
test = [5;6;0;-1;0;5;0;6;0;8]+2;
test5 = [2;6;8;-1;0;7;8;6;8;8];
if ismember(0,test)
Matrix3 = 0;
else
Matrix3 = test5*7+5;
end
  7 件のコメント
Stanislao Pinzón
Stanislao Pinzón 2020 年 5 月 17 日
or instead
test = [5;6;0;-1;0;5;0;6;0;8];
test5 = [2;6;8;-1;0;7;8;6;8;8];
Matrix3 = test5*7+5;
a = find(test==0);
Matrix3(a) = 0;
Stephen23
Stephen23 2020 年 5 月 17 日
find is superfluous. Get rid of it.

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

その他の回答 (3 件)

Image Analyst
Image Analyst 2020 年 5 月 17 日
Try masking:
test = [5;6;0;-1;0;5;0;6;0;8];
test5 = [2;6;8;-1;0;7;8;6;8;8];
% Now multiply by 7 and add 5 only.
output = test5 * 7 + 5;
% Find indexes where test is zero.
mask = (test == 0)
% Erase where test was 0.
output(mask) = 0

Yundie Zhang
Yundie Zhang 2020 年 5 月 17 日
編集済み: Walter Roberson 2020 年 5 月 17 日
test = [5;6;0;-1;0;5;0;6;0;8];
test5 = [2;6;8;-1;0;7;8;6;8;8];
if test ==0
newMAT = 0
elseif test ~=0
newMAT = (test5*7)+5
end
  2 件のコメント
Ibrahim AlZoubi
Ibrahim AlZoubi 2020 年 5 月 17 日
編集済み: Ibrahim AlZoubi 2020 年 5 月 17 日
the result is:
Undefined function or variable 'newMAT'.
when I want to know the new matrix "newMAT"
Walter Roberson
Walter Roberson 2020 年 5 月 17 日
Remember that when you apply if or while to a non-scalar, that the result is only considered true if every item being tested is non-zero.
if test ==0
Only some of the items in test are 0, so that fails
elseif test ~=0
Only some of the items in test are non-zero, so that fails.

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


Walter Roberson
Walter Roberson 2020 年 5 月 17 日
Create the new matrix by applying the calculation to all of the entries in the second matrix, as if the rule about 0 was not present. This can be done in vectorized form in a single statement.
Now, everywhere that there is a 0 in the first matrix, replace the content of the third matrix with 0. This can be done in vectorized form in a single statement, using logical indexing.
  3 件のコメント
Stephen23
Stephen23 2020 年 5 月 17 日
"so you mean to edit the 3rd matrix manually ?"
No. Use logical indexing:
which could be generated very simply using ==.
Walter Roberson
Walter Roberson 2020 年 5 月 17 日
For example:
A = randi(10, 5, 8);
A(A>7) = -1;

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

カテゴリ

Help Center および File ExchangeExtend Testing Frameworks についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by