Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 多维版本的;克朗“;产品?_Matlab_Vectorization_Matrix Multiplication - Fatal编程技术网

Matlab 多维版本的;克朗“;产品?

Matlab 多维版本的;克朗“;产品?,matlab,vectorization,matrix-multiplication,Matlab,Vectorization,Matrix Multiplication,现在我有一个矩阵a的维数是N乘以p,另一个矩阵B的维数是N乘以q。我想要的是一个矩阵,比如说C,维数N乘以pq,这样 C(i,:) = kron(A(i,:), B(i,:)); 如果N较大,则在N行上循环可能需要相当长的时间。因此,目前我正在适当地增加A和B(结合使用repmat、permute和reforme),以将维度N的每个矩阵转化为pq,然后用类似的公式表示C C = A_aug .* B_aug; 有更好的主意吗?检查一下++魔术- 基准测试与验证 基准测试代码- %// Se

现在我有一个矩阵a的维数是N乘以p,另一个矩阵B的维数是N乘以q。我想要的是一个矩阵,比如说C,维数N乘以pq,这样

C(i,:) = kron(A(i,:), B(i,:));
如果N较大,则在N行上循环可能需要相当长的时间。因此,目前我正在适当地增加A和B(结合使用repmat、permute和reforme),以将维度N的每个矩阵转化为pq,然后用类似的公式表示C

C = A_aug .* B_aug;
有更好的主意吗?

检查一下++魔术-


基准测试与验证

基准测试代码-

%// Setup inputs
N = 200;
p = 190;
q = 180;
A = rand(N,p);
B = rand(N,q);

disp('--------------------------------------- Without magic')
tic
C = zeros(size(A,1),size(A,2)*size(B,2));
for i = 1:size(A,1)
    C(i,:) = kron(A(i,:), B(i,:));
end
toc

disp('--------------------------------------- With some magic')
tic
out = reshape(bsxfun(@times,permute(A,[1 3 2]),B),size(A,1),[]);
toc

error_val = max(abs(C(:)-out(:)))
输出-

--------------------------------------- Without magic
Elapsed time is 0.524396 seconds.
--------------------------------------- With some magic
Elapsed time is 0.055082 seconds.
error_val =
     0

查看MATLAB的FileExchange上的
superkron
-
--------------------------------------- Without magic
Elapsed time is 0.524396 seconds.
--------------------------------------- With some magic
Elapsed time is 0.055082 seconds.
error_val =
     0