Borrar filtros
Borrar filtros

pointwise multiplication of sparse matrix with full array

5 visualizaciones (últimos 30 días)
How can I do this operation?
A=sparse([1 0;0 0]);
B=rand(2,2,2,2);
C=A.*B;
Error using .*
N-D sparse output arrays are not supported.
the only way is converting B into a sparse array with this function?
remark: A is sparse but B is not.

Respuesta aceptada

Torsten
Torsten el 12 de Dic. de 2022
Editada: Torsten el 12 de Dic. de 2022
rand(2,2,2,2) generates a (2x2x2x2) array for B. You cannot multiply A with such a B elementwise because the array sizes don't match.
A=sparse([1 0;0 0]);
B=rand(2,2);
C=A.*B
C =
(1,1) 0.6805
Or what do you expect as result for B being (2x2x2x2) ?
  2 comentarios
Torsten
Torsten el 12 de Dic. de 2022
@Sandra Martinez comment moved here:
Yes, I know. But if A is a full matrix this is possible ( in that case matlab makes the pointwisemultiplicación of B(: , : , i,j) with A, for each i,j) The problem here is with a sparse matix and pointwise multiplication
Torsten
Torsten el 12 de Dic. de 2022
Editada: Torsten el 12 de Dic. de 2022
Maybe
?
But I wouldn't go this way of artificial data structures further.

Iniciar sesión para comentar.

Más respuestas (1)

Sandra Martinez
Sandra Martinez el 13 de Dic. de 2022
Yes, this works now
M=rand(2,2,2,2);
N=[1 0;0 0];
A=ndSparse(M);%You need to download this function
Unrecognized function or variable 'ndSparse'.
B=sparse(N);
C=A.*B;
But, what do you mean by "artificial data structure"? In fact, I measure times and making pontiwise multiplication with full arrays takes less time (a factor 7).
n=50;
for i=1:20;
M=rand(n,n,n,n);
N=zeros(n,n);
N(1,1)=2;
tic
L=M.*N;%pointwise multiplication with full arrays
t1=toc;
tt(i)=t1;
A=ndSparse(M);%You need to download this function
B=sparse(N);
tic
C=A.*B;%pointwise multiplication using
sparse arrays
t2=toc;
tt2(i)=t2;
end
%%
% mean(tt)
% 0.0045
%mean(tt2)
% 0.0350
But if both are matices the time is the other way
for i=1:20;
M1=rand(n,n);
N1=zeros(n,n);
N(1,1)=2;
tic
L1=M1.*N1;
t3=toc;
tt3(i)=t3;
A1=ndSparse(M1);
B1=sparse(N1);
tic
C1=A1.*B1;
t4=toc;
tt4(i)=t4;
end
mean(tt4)/mean(tt3)
% 5.8859 doing pointwise multiplication using sprse matrices it is almost 6
% times faster.
Is there an explanation for that?
  2 comentarios
Torsten
Torsten el 13 de Dic. de 2022
The author of ndSparse (Matt J) is active in this forum.
Maybe you should open a new question where ndSparse is part of the title and ask him directly.
Sandra Martinez
Sandra Martinez el 13 de Dic. de 2022
OK. I will do that. Thank you very mucho for your answer.

Iniciar sesión para comentar.

Categorías

Más información sobre Performance and Memory en Help Center y File Exchange.

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by