Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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 沿大型矩阵对角线在3D阵列中插入n x n矩阵的代码矢量化_Arrays_Matlab_Matrix_Vectorization - Fatal编程技术网

Arrays 沿大型矩阵对角线在3D阵列中插入n x n矩阵的代码矢量化

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

就像在中一样,我试图沿着一个大矩阵的对角线插入小的正方形矩阵。但是,这些矩阵现在包含在三维数组中,并且具有不同的值。如前所述,将添加重叠值,并且仅在小矩阵完全适合大矩阵的位置插入小矩阵。阶跃尺寸始终等于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
所需的结果是一个
N
x
N
矩阵,其中填充了
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