Arrays 沿大型矩阵对角线在3D阵列中插入n x n矩阵的代码矢量化
就像在中一样,我试图沿着一个大矩阵的对角线插入小的正方形矩阵。但是,这些矩阵现在包含在三维数组中,并且具有不同的值。如前所述,将添加重叠值,并且仅在小矩阵完全适合大矩阵的位置插入小矩阵。阶跃尺寸始终等于1 通过使用for循环,我已经找到了答案,但为了提高效率,我正在尝试对代码进行矢量化。我该怎么做?当前的未屏蔽代码如下所示Arrays 沿大型矩阵对角线在3D阵列中插入n x n矩阵的代码矢量化,arrays,matlab,matrix,vectorization,Arrays,Matlab,Matrix,Vectorization,就像在中一样,我试图沿着一个大矩阵的对角线插入小的正方形矩阵。但是,这些矩阵现在包含在三维数组中,并且具有不同的值。如前所述,将添加重叠值,并且仅在小矩阵完全适合大矩阵的位置插入小矩阵。阶跃尺寸始终等于1 通过使用for循环,我已经找到了答案,但为了提高效率,我正在尝试对代码进行矢量化。我该怎么做?当前的未屏蔽代码如下所示 function M = TestDiagonal2() N = 10; n = 2; maxRand = 3; dee
function M = TestDiagonal2()
N = 10;
n = 2;
maxRand = 3;
deepMiniM = randi(maxRand,n,n,N+1-n);
M = zeros(N);
for i = 1:N+1-n
M(i:i+n-1,i:i+n-1) = M(i:i+n-1,i:i+n-1) + deepMiniM(:,:,i);
end
end
所需的结果是一个N
xN
矩阵,其中填充了N+1
对角线:
3 1 0 0 0 0 0 0 0 0
4 5 3 0 0 0 0 0 0 0
0 3 3 3 0 0 0 0 0 0
0 0 1 6 3 0 0 0 0 0
0 0 0 4 4 4 0 0 0 0
0 0 0 0 2 3 2 0 0 0
0 0 0 0 0 2 6 2 0 0
0 0 0 0 0 0 4 2 2 0
0 0 0 0 0 0 0 3 3 1
0 0 0 0 0 0 0 0 3 3
这利用了,以及在重合索引处添加值,并在通常情况下线性化矩阵
我找不到问题或问题?@不可还原代码在当前状态下没有矢量化。我想知道我该如何对它进行矢量化。当你添加了一个问题时,你应该告诉我们你尝试了什么/为什么没有实现它。我没有实现它,因为我对矩阵操作的理解是有限的。如果需要插入的值是标量值,我就不会有问题。如果不使用for循环,似乎没有一种直观的方法来实现我想要的结果。我正在研究稀疏矩阵,但是它们非常复杂,我很难理解在这种情况下如何使用它们。
ind1 = repmat((1:n).', n, 1) + (0:N-n); % column indices for the sum
ind2 = repelem((1:n).', n) + (0:N-n); % row indices for the sum
M = full(sparse(ind1(:), ind2(:), deepMiniM(:), N, N)); % sum over those indices