multiplying each non zero element of a sparse matrix by a certain number

Hello all,
I have a sparse matrix S with few non-zero elements in its row and columns. I have a vector P with the same number of elements as the total non-zero elements of S. I would like to multiply each non-zero element of S by a value in P. For example, let
S = [0 0 1 1;0 1 1 0;1 1 0 0; 1 0 0 1]
P = [0.7421 0.3751 1.9079 1.4141 1.4411 2.0796 2.4199 1.1002]
I would like to get
W = [0 0 0.7421 0.3751;0 1.9079 1.4141 0;1.4411 2.0796 0 0; 2.4199 0 0 1.1002]
Can somebody please help me with a fast way of doing this task? Thank you.

 채택된 답변

This works — and NO LOOPS:
S = [0 0 1 1;0 1 1 0;1 1 0 0; 1 0 0 1] ;
P = [0.7421 0.3751 1.9079 1.4141 1.4411 2.0796 2.4199 1.1002];
Snz = find(S == 1);
Wv = S(Snz).*P';
W = zeros(1,numel(S));
W(Snz) = Wv;
W = reshape(W, size(S))'
W =
0 0 0.7421 0.3751
0 1.9079 1.4141 0
1.4411 2.0796 0 0
2.4199 0 0 1.1002

추가 답변 (2개)

James Tursa
James Tursa 2015년 11월 25일
편집: James Tursa 2015년 11월 25일
W = S;
G = logical(S);
W(G) = W(G) .* P(:);
Note: This preserves the sparse attribute of S. I.e., if S is sparse, then W will be sparse. If S is full, then W will be full.

댓글 수: 3

Mnr
Mnr 2015년 11월 26일
편집: Mnr 2015년 11월 26일
Thanks! but it does not give me the same answer as Star Strider's method?!
Ah ... I didn't notice that you wanted the multiplication by rows, not columns. So some transposes will be required for this method. E.g.,
W = S';
G = logical(W);
W(G) = W(G) .* P(:);
W = W';
I really appreciate it!

댓글을 달려면 로그인하십시오.

Stalin Samuel
Stalin Samuel 2015년 11월 25일

0 개 추천

S = [0 0 1 1;0 1 1 0;1 1 0 0; 1 0 0 1] ;
 P =  [0.7421 0.3751 1.9079 1.4141 1.4411 2.0796 2.4199 1.1002] ;
[r c] = size(S);
W = zeros(r,c);
n = 1;
for r1 = 1:r
    for c1 = 1:c
        if S(r1,c1)~=0
            W(r1,c1) =  S(r1,c1)*P(n) ;
            n = n+1;
        end
    end
end

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

질문:

Mnr
2015년 11월 25일

댓글:

Mnr
2015년 11월 28일

Community Treasure Hunt

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

Start Hunting!

Translated by