Matlab中单个循环的矢量化(相乘然后相加)

Jaemin Son

我有一个nX2矩阵A和一个3D矩阵K。我想进行元素逐个乘法,指定A的每个行向量在K的第3维中指定2个索引,并对它们求和。

例如,当n = 2时,

A=[1 2;3 4];%2X2 matrix
K=unifrnd(0.1,0.1,2,2,4);%just random 3D matrix
L=zeros(2,2);%save result to here
for t=1:2
    L=L+prod(K(:,:,A(t,:)),3);
end

在这种情况下可以摆脱for循环吗?

安德拉斯·迪克(Andras Deak)

这个怎么样?

B = A.'; %'
L = squeeze(sum(prod(...
                  reshape(permute(K(:,:,B(:)),[3 1 2]),2,[],size(K,1),size(K,2)),...
                  1),...
            2));

尽管您的测试用例太简单了,所以我不能完全确定它是正确的。

这个想法是,我们首先以A大列的顺序获取所有索引,然后重塑的元素K,使前两个维的大小为[2, n],后两个维为的原始2 K然后,我们乘积,然后取必要尺寸的和,最后得到一个矩阵,必须对其进行压缩以获得二维矩阵。


使用更多有用的测试用例:

K = rand(2,3,4);
A = randi(4,4,2);
L = zeros(2,3);%save result to here
for t=1:size(A,1)
    L = L+prod(K(:,:,A(t,:)),3);
end

B = A.'; %'
L2 = squeeze(sum(prod(reshape(permute(K(:,:,B(:)),[3 1 2]),2,[],size(K,1),size(K,2)),1),2));

然后

>> isequal(L,L2)
ans =
     1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab矢量化的for循环

来自分类Dev

矢量化代码比Matlab中的for循环慢

来自分类Dev

矢量化代码比Matlab中的for循环慢

来自分类Dev

在 MATLAB 中矢量化包含 circshift 的多个嵌套循环

来自分类Dev

MATLAB / Octave循环的矢量化

来自分类Dev

矢量化代码比循环慢?的MATLAB

来自分类Dev

自相关MATLAB循环的矢量化

来自分类Dev

R中for循环的矢量化

来自分类Dev

Python中嵌套for循环的矢量化

来自分类Dev

AVX循环矢量化中的错误

来自分类Dev

R 中时差循环的矢量化

来自分类Dev

矢量化三重循环-MATLAB

来自分类Dev

在Matlab中嵌套循环中对更高维度进行矢量化

来自分类Dev

如何在MATLAB中矢量化这些while并嵌套for循环?

来自分类Dev

矢量化Elseif循环

来自分类Dev

Mat的for循环矢量化

来自分类Dev

Matlab效率-矢量化

来自分类Dev

MATLAB bsxfun或矢量化

来自分类Dev

Matlab效率-矢量化

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

在Theano中循环(或矢量化)可变长度矩阵

来自分类Dev

MATLAB中函数数组的矢量化或单行评估

来自分类Dev

MATLAB:将3d数组与2d矩阵相乘并通过矢量化求和

来自分类Dev

在矢量化函数中调用矢量化函数

来自分类Dev

动态循环的矢量化循环

来自分类Dev

double for循环的高效矢量化

来自分类Dev

AVX循环矢量化错误

来自分类Dev

R:成对矩阵的矢量化循环