相关疑难解决方法(0)

MATLAB:如何向量乘两个矩阵数组?

我有两个三维数组,前两个维度表示矩阵,最后一个维度通过参数空间计算,作为一个简单的例子拿

A = repmat([1,2; 3,4], [1 1 4]);
Run Code Online (Sandbox Code Playgroud)

(但假设A(:,:,j)每个人都不同j).一个如何能够容易地进行以每个j两个这样的矩阵阵列的矩阵乘法AB

C = A; % pre-allocate, nan(size(A,1), size(B,2)) would be better but slower
for jj = 1:size(A, 3)
  C(:,:,jj) = A(:,:,jj) * B(:,:,jj);
end
Run Code Online (Sandbox Code Playgroud)

当然可以胜任,但是如果第三维更像是1e3元素,那么这非常慢,因为它不使用MATLAB的矢量化.那么,有更快的方法吗?

arrays matlab matrix vectorization matrix-multiplication

8
推荐指数
2
解决办法
2万
查看次数

bsxfun在矩阵乘法中的实现

一如既往地想从你身上学到更多东西,我希望能通过以下代码获得一些帮助.

我需要完成以下任务:

1)我有一个向量:

x = [1 2 3 4 5 6 7 8 9 10 11 12]
Run Code Online (Sandbox Code Playgroud)

2)和矩阵:

A =[11    14    1
    5     8    18
    10    8    19
    13    20   16]
Run Code Online (Sandbox Code Playgroud)

我需要能够将eachxevery值相乘A,这意味着:

new_matrix = [1* A
              2* A
              3* A
               ...
              12* A]
Run Code Online (Sandbox Code Playgroud)

这将给我这个new_matrix大小(12*m x n)假设A (mxn).在这种情况下(12*4x3)

我怎么能用bsxfunmatlab 做这个呢?并且,这种方法会比一个快for-loop吗?

关于我for-loop,我在这里也需要一些帮助...我无法存储每个"new_matrix"循环运行:(

for i=x
new_matrix = A.*x(i)
end
Run Code Online (Sandbox Code Playgroud)

提前致谢!! …

performance matlab matrix matrix-multiplication bsxfun

7
推荐指数
2
解决办法
1621
查看次数

Matlab中的张量收缩

可能重复:
MATLAB:如何向量乘两个矩阵数组?

有没有办法在Matlab中签订高维张量?

例如,假设我有两个三维数组,具有以下大小:

size(A) == [M,N,P]
size(B) == [N,Q,P]
Run Code Online (Sandbox Code Playgroud)

我想承包AB分别在第二和第一指标.换句话说,我想考虑A成为一个大小矩阵的数组,[M,N]并且B是等长的[N,Q]矩阵数组; 我想逐个元素(逐个矩阵)乘以这些数组来获得大小[M,Q,P].

我可以通过for循环来做到这一点:

assert(size(A,2) == size(B,1));
assert(size(A,3) == size(B,3));

M = size(A,1);
P = size(A,3);
Q = size(B,2);

C = zeros(M, Q, P);
for ii = 1:size(A,3)
    C(:,:,ii) = A(:,:,ii) * B(:,:,ii);
end
Run Code Online (Sandbox Code Playgroud)

有没有办法避免for循环?(也许可以使用任意数量维的数组?)

matlab matrix vectorization matrix-multiplication

5
推荐指数
1
解决办法
8279
查看次数

使用matmul将数组的一部分乘以矩阵

我的问题类似于这个与3D矩阵相乘的3D矩阵.但是,我在Fortran中编码.

再说了,如果我有一个RxSxT矩阵ASxU矩阵B,其中R,S,T,U是整数,我要乘A(:,:,0)B.我怎么能这样做matmul?当我做的事情

    C(:,:,0) = matmul(A(:,:,0),B)
Run Code Online (Sandbox Code Playgroud)

编译器(gfortran)给出:

    Warning:Array reference at (1) is out of bounds (0 < 1) in dimension 3 
    f951: internal compiler error: Segmentation fault
Run Code Online (Sandbox Code Playgroud)

有没有解决的办法?谢谢.

编辑:我应该补充一点,我实际上是转置第二个矩阵.再说了,A一个RxSxT矩阵和B一个UxS矩阵.然后

 C(:,:,0) = matmul(B,transpose(A(:,:,0))
Run Code Online (Sandbox Code Playgroud)

转置可能是问题的一部分.它将A(i,j,k)转换为A(k,i,j)吗?

fortran matrix matrix-multiplication

1
推荐指数
1
解决办法
1283
查看次数