Define a matrix elementwise

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

Your code does not make sense. Can you fix it so that we can understand the algorithm you are trying to implement?
I want to define the following matrix Q, such that Q_ij=A_ij when B_ij=0 Q_ij=0 if A_ij=0, otherwise set Q_ij=1/|A_ij| where A and B are defined in the algorithm
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
>>
Thanks, appreciated
So what to do if the Q is not square matrix, can you define a rectangular matrix with all 1?
Makes no difference as long as A,B same size...and Q is size(A). Did you even try it?
Sorry I m new to Matlab, I tried but I m wondering how to define Q as a variable of A,B first. It always say, functions definition are permitted this way
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.
I understand your code, however, I want to define the function Q(A,B) and employ it in other parts of my algorithm. So I want to define an actual function instead of running it under command menu. Hopefully, this clarifies
function result = Q(A,B)
result = 1./abs(A).*(B~=0);
result(isnan(result))==0;
and store it in Q.m
MatLab
MatLab on 3 Apr 2016
Edited: MatLab on 3 Apr 2016
Thanks so much, this really helps. Appreciated! I wrote function Q(A,B)=result instead, it didn't run
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.

Sign in to comment.

 Accepted Answer

dpb
dpb on 30 Mar 2016
Edited: dpb on 1 Apr 2016
Q=1./abs(A).*(B~=0); % 1/abs(A) and zero B locations
Q(isnan(Q))==0; % fixup 0 locations from A (logical*Inf-->NaN)
ADDENDUM
Or, if one doesn't like the cleanup after the fact, one can do it first...
A(A==0)=inf; % so 1/Inf-->0
Q=1./abs(A).*(B~=0); % 1/abs(A) and zero B locations

More Answers (0)

Categories

Tags

Asked:

on 30 Mar 2016

Commented:

dpb
on 3 Apr 2016

Community Treasure Hunt

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

Start Hunting!