12345678910111213141516171819202122232425262728293031323334353637383940 |
- function K = spm_kron(A,B)
- % as for kron, but forces sparse outputs
- %KRON Kronecker tensor product.
- % KRON(X,Y) is the Kronecker tensor product of X and Y.
- % The result is a large matrix formed by taking all possible
- % products between the elements of X and those of Y. For
- % example, if X is 2 by 3, then KRON(X,Y) is
- %
- % [ X(1,1)*Y X(1,2)*Y X(1,3)*Y
- % X(2,1)*Y X(2,2)*Y X(2,3)*Y ]
- %
- % Class support for inputs X,Y:
- % float: double, single
- % Previous versions by Paul Fackler, North Carolina State,
- % and Jordan Rosenthal, Georgia Tech.
- % Copyright 1984-2004 The MathWorks, Inc.
- % $Revision: 2863 $ $Date: 2004/06/25 18:52:18 $
- %__________________________________________________________________________
- % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging
-
- % Karl Friston
- % $Id: spm_kron.m 2863 2009-03-11 20:25:33Z guillaume $
- [ma,na] = size(A);
- [mb,nb] = size(B);
- [ia,ja,sa] = find(A);
- [ib,jb,sb] = find(B);
- ia = ia(:); ja = ja(:); sa = sa(:);
- ib = ib(:); jb = jb(:); sb = sb(:);
- ka = ones(size(sa));
- kb = ones(size(sb));
- t = mb*(ia-1)';
- ik = t(kb,:)+ib(:,ka);
- t = nb*(ja-1)';
- jk = t(kb,:)+jb(:,ka);
- K = sparse(ik,jk,sb*sa.',ma*mb,na*nb);
|