【发布时间】:2019-10-21 12:18:30
【问题描述】:
与my earlier question 一样,我试图沿大矩阵的对角线插入小方阵。但是,这些矩阵现在包含在 3D 数组中,并且具有不同的值。和以前一样,要添加重叠值,并且仅将小矩阵插入到它们完全适合大矩阵的位置。步长维度将始终等于 1。
我已经通过使用 for 循环获得了答案,但我正在尝试将此代码向量化以提高效率。我该怎么做?当前的未矢量化代码如下所示。
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
所需的结果是一个NxN 矩阵,其中填充了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
【问题讨论】:
-
我找不到问题或问题?
-
@Irreducible 代码在其当前状态下未矢量化。我想知道如何矢量化它。
-
当您添加了一个问题时,您应该告诉我们您尝试这样做的原因/您未能实施它的原因。
-
我未能实现它,因为我对矩阵操作的理解有限。如果要插入的所需值是标量,我不会有问题。如果不使用 for 循环,似乎没有一种直观的方法可以实现我想要的结果。我正在研究稀疏矩阵,但是这些矩阵非常复杂,我很难理解在这种情况下如何使用它们。
标签: arrays matlab matrix vectorization