How to store the non zero value from each column of a matrix as a column vector (but if there is only zeros on the column store zero) in each iteration?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
How to store the non zero value from each column of an output matrix which its size(5*3) as a clounm vector with a size(3*1) (but if there is only zeros on the column store zero) in each iteration? Then combine all the 3*1 vector in one matrix call it Outputs.
For example : This output from an iteration of the following program
y =
0.38 0 0
0 0 0
0 0.58 0.71
0 0 0
0 0 0
in each iteration there are different loctions for the non zerovalue and in each column there is just only one non zerovalue.
Can anyone help me in this problem?
This is the program:
mf1=[fismf("trimf" , [0 0 2], 'Name', "ZE") ;
fismf("trimf" , [2 6 10], 'Name', "PS") ;
fismf("trimf" , [10 14 18], 'Name', "M") ;
fismf("trimf" , [18 22 26], 'Name', "PL") ;
fismf("trapmf" , [26 27 60 60], 'Name', "PVL") ]
for i = 1:127
y = evalmf(mf1,RNF(:,i));
end
5 Kommentare
Akzeptierte Antwort
Stephen23
am 6 Mär. 2022
Bearbeitet: Stephen23
am 6 Mär. 2022
The simplest solution is probably to use MAX:
M = [0.38,0,0;0,0,0;0,0.58,0.71;0,0,0;0,0,0]
V = max(M,[],1).'
An example where one column contains only zeros:
M = [0.38,0,0;0,0,0;0,0,0.71;0,0,0;0,0,0]
V = max(M,[],1).'
If the values can be negative:
M = [0.38,0,0;0,0,0;0,-0.58,0.71;0,0,0;0,0,0]
V = (max(M,[],1)+min(M,[],1)).'
" I want to combine all the column vectors in matrix at the end of the program"
Store them in a cell array, then concatenate them together after the loop:
N = number of iterations
C = cell(1,N)
for k = 1:N
V = the output of your calculation
C{k} = V;
end
M = horzcat(C{:}) % or VERTCAT
2 Kommentare
Stephen23
am 6 Mär. 2022
"but how can I combine your solution in for loop and incroporate it with my code? and at the end of the iterations store all the column vectors in one matrix?"
Have a look at the end of my answer. I showed you how.
Weitere Antworten (1)
Arif Hoq
am 6 Mär. 2022
Bearbeitet: Arif Hoq
am 6 Mär. 2022
if there is only 1 zero in a column
A=[0.38 0 0
0 0 5
0 0.58 0.71
0 0 5
0 0 5];
idx=A==0;
for n=1:size(A,2)
if sum(idx(:,n))>1 % if there is more than 1 zero
Output=A(A>0);
elseif sum(idx(:,n))==1 % if there is only 1 zero
Output=[A(A>0);0]
end
end
Or if more than 1 zero in the column
A=[0.38 0 0
0 0 0
0 0.58 0.71
0 0 0
0 0 0];
idx=A==0;
for n=1:size(A,2)
if sum(idx(:,n))>1 % if there is more than 1 zero
Output=A(A>0)
else sum(idx(:,n))==1 % if there is only 1 zero
Output=[A(A>0);0]
end
end
3 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!