Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays 在矩阵乘法中,我如何需要乘法一组元素而不是一个元素_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 在矩阵乘法中,我如何需要乘法一组元素而不是一个元素

Arrays 在矩阵乘法中,我如何需要乘法一组元素而不是一个元素,arrays,matlab,matrix,Arrays,Matlab,Matrix,假设我有一个维数为[4x4]的矩阵和一个[16x1]的向量,我需要将向量中的每4个元素乘以矩阵中的一个元素,而不是将行中的元素乘以向量中的元素,我如何使用循环 例如,如下例所示,结果向量中前四个元素的结果,然后是矩阵中第二、第三和第四行的相同结果: 所以这个例子中的结果应该是[16x1] 谢谢你我假设有一些细节,但这应该可以做到: A=reshape(1:16,4,4).'; b=repelem([2,0,1,3],1,4).'; c=[]; for row=1:size(A,1)

假设我有一个维数为[4x4]的矩阵和一个[16x1]的向量,我需要将向量中的每4个元素乘以矩阵中的一个元素,而不是将行中的元素乘以向量中的元素,我如何使用循环

例如,如下例所示,结果向量中前四个元素的结果,然后是矩阵中第二、第三和第四行的相同结果:

所以这个例子中的结果应该是[16x1]


谢谢你

我假设有一些细节,但这应该可以做到:

A=reshape(1:16,4,4).';
b=repelem([2,0,1,3],1,4).';

c=[];
for row=1:size(A,1)
     c=[ c; sum(reshape(repelem(A(row,:),4).*b.',4,[]),2)];
end
我在这里假设你的向量演示只是一个糟糕的例子,你不会有重复的值,否则一个简单的版本可以通过不做3/4次乘法来实现


如果您无法访问repelem,请查看执行相同操作的替代代码:

查看这是否是您想要的:

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
v = [2 2 2 2 0 0 0 0 1 1 1 1 3 3 3 3].';
r = reshape(sum(bsxfun(@times, permute(A, [3 2 1]), permute(reshape(v, 1, [], size(A,2)), [2 3 1])), 2), [], 1);

r =
    17
    17
    17
    17
    41
    41
    41
    41
    65
    65
    65
    65
    89
    89
    89
    89

这只是伪装的矩阵乘法。。。如果高向量是一个与所示矩阵大小相同的矩阵,其中每个高亮显示的块都是一行,则它是矩阵乘法。我们可以设置这个,然后重新塑造成一个向量

您可以使用索引将其转换为简单的矩阵乘法。今天我已经提出了一个问题,详细说明了下面的索引如何使用bsxfun工作,然后我们在最后进行了重塑:

% Setup
A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
v = [2 2 2 2 0 0 0 0 1 1 1 1 3 3 3 3].';

% Matrix mutliplication
r = numel(v)/size(A,1);
b = A * v( bsxfun( @plus, (1:r:numel(v)).', 0:r-1 ) );
% Make result a column vector
b = reshape( b.', [], 1 );
使用kron,您可以使用以下一行:

%A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
%v = [2 2 2 2 0 0 0 0 1 1 1 1 3 3 3 3].';
sum(kron(A,ones(4,4)).'.*v).'/4

我使用kronecker张量积来复制矩阵的4x4时间。然后是纯代数。

非常感谢你的快速回答,你能解释一下你所说的重复是什么意思吗??当我在MATLAB中键入帮助时,我没有得到它。是否对2、0、1和3的元素执行重复操作??但是它们是随机生成的呢?使用命令repmatA,4,4如何,其中A是矩阵[4x4]?但在这种情况下,整个矩阵将被重复,是否有替代repmat的命令,我可以一个元素一个元素地重复???@Gze,请阅读链接问题。对于你的问题,它有7个答案,我不需要在这里解释。非常感谢,这也很有效。但我没有权利投票赞成,也没有权利接受不止一个答案:我考虑过这个问题,然后去问我,我只是循环:太感谢你了,这也很有效。但我无权投票赞成,也无权接受一个以上的答案:这是一个令人愉快的答案!不错。