How to generate and calculate with empty values of matrix-elements
이전 댓글 표시
PROBLEM:
I want to use logical functions to perform calculations between
matrices and don't know how to generate an empty value NaN.
EXAMPLE:
I use the two matrices below and if the conditions are not satisfied,
the output should be empty:
clear all;
close all;
m=rand(10,5);
n=rand(10,5);
T = zeros(size(m)); % Make another array to fill up...
for i = 1:numel(m)
if m(i)>.5 && n(i)>.5
T(i) = m(i+1)+n(i+1);
else
T(i) = 'NaN';
end
end
However, I obtain the following error:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
I hope someone know the correction of this mistake
Thank you in advance
Emerson
댓글 수: 1
Oleg Komarov
2011년 8월 28일
Please format the code as indicated here: http://www.mathworks.com/matlabcentral/answers/13205-tutorial-how-to-format-your-question-with-markup
채택된 답변
추가 답변 (1개)
Oleg Komarov
2011년 8월 28일
You can write directly:
NaN
instead of
'NaN'
but my suggestion would be to preallocate NaNs directly and delete the else part:
T = NaN(size(m))
The other problem is that you are assigning to T(i) the next values in m and n, but if i = 50 then the index will exceed the matrix dimensions.
So, what do you want to accomplish here? (you can also avoid the loop)
EDIT replaced & with |:
m = rand(10,5);
n = rand(10,5);
T = [m(2:end,:) + n(2:end,:); NaN(1,size(m,2))];
T(m(1:end-1,:) <= .5 | n(1:end-1,:) <= .5) = NaN;
댓글 수: 9
Emerson De Souza
2011년 8월 28일
Oleg Komarov
2011년 8월 28일
For the first situation:
Tij = f(Mij,Nij) no problem but what is the logical function? Almost sure that with logical indexing the loop can also be avoided.
For the second situation:
Tij = f(M(i+x)j,N(i+x)j) again what is the logical function and the values of x?
Cannot help more than that w/o additional details.
Emerson De Souza
2011년 8월 28일
Oleg Komarov
2011년 8월 28일
You have to decide what to do with the last row of T, do you want it to be NaN, because obviously it cannot be:
T_last,j = m_(last+1),j + n_(last+1),j
unless T is k by z and m,n are k+1 by z.
Emerson De Souza
2011년 8월 28일
Emerson De Souza
2011년 8월 30일
Oleg Komarov
2011년 8월 30일
Replace the & with an |.
Emerson De Souza
2011년 8월 30일
Oleg Komarov
2011년 8월 30일
You have to be careful when checking m and n, if their first element are both bigger than .5 then the first element of T is the sum of the SECOND elements of m and n.
After correcting for the | I do get consistent results. Try to replace in my example:
m = rand(3);
n = rand(3);
You'll be able to visualize and compare more easily.
카테고리
도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!