Define a matrix elementwise
Show older comments
I would like to define the matrix Q based on the given matrix A and B (both very large). So can I define like this?
Q(i,j) = A(i,j);
if B(i,j)=0
0; elseif A(i,j)=0
else 1/abs(A(i,j));
end
12 Comments
James Tursa
on 30 Mar 2016
Your code does not make sense. Can you fix it so that we can understand the algorithm you are trying to implement?
MatLab
on 31 Mar 2016
dpb
on 31 Mar 2016
Which is what the Answer provided does...
>> A=randn(4) % sample data
A =
0.9642 -0.7982 1.3514 -0.8479
0.5201 1.0187 -0.2248 -1.1201
-0.0200 -0.1332 -0.5890 2.5260
-0.0348 -0.7145 -0.2938 1.6555
>> B=ones(4);B(randperm(numel(A),round(0.2*numel(A))))=0 % hit-n-miss zeros in B
B =
1 0 1 1
1 1 1 0
1 0 1 1
1 1 1 1
>> Q=1./abs(A).*(B~=0); Q(isnan(Q))==0;
Q =
1.0371 0 0.7400 1.1793
1.9229 0.9817 4.4490 0
49.9305 0 1.6977 0.3959
28.7595 1.3995 3.4042 0.6040
>>
MatLab
on 31 Mar 2016
MatLab
on 31 Mar 2016
dpb
on 31 Mar 2016
Makes no difference as long as A,B same size...and Q is size(A). Did you even try it?
MatLab
on 2 Apr 2016
dpb
on 3 Apr 2016
Sorry, don't understand the question...you have an A and B? If so, just type in what I did...Matlab allocates automatically on assignment, there's nothing needed a priori.
MatLab
on 3 Apr 2016
Walter Roberson
on 3 Apr 2016
Edited: Walter Roberson
on 3 Apr 2016
function result = Q(A,B)
result = 1./abs(A).*(B~=0);
result(isnan(result))==0;
and store it in Q.m
dpb
on 3 Apr 2016
Ah, sorry I didn't follow where the hangup was...note now that if you follow Walter's lead and name the function Q if you subsequently write
Q=Q(A,B);
that by Matlab parsing rules you will have aliased the definition of the function Q by a resulting array Q and won't be able to use the function again until clear Q or change context such that the array isn't in scope or the like.
Accepted Answer
More Answers (0)
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!