【发布时间】:2019-10-21 10:39:55
【问题描述】:
我正在尝试沿大矩阵(例如 10x10)的对角线插入小矩阵(2x2)的元素。添加重叠值,小矩阵仅插入到可以完全放入大矩阵的位置。
我已经使用 for 循环实现了这一点,但我很好奇该过程是否可以向量化。
function M = TestDiagonal()
N = 10;
miniM = [1, -1; -1, 1];
M = zeros(N);
for i = 1:N-1
M(i:i+1,i:i+1) = M(i:i+1,i:i+1) + miniM;
end
end
给出所需的矩阵
1 -1 0 0 0 0 0 0 0 0
-1 2 -1 0 0 0 0 0 0 0
0 -1 2 -1 0 0 0 0 0 0
0 0 -1 2 -1 0 0 0 0 0
0 0 0 -1 2 -1 0 0 0 0
0 0 0 0 -1 2 -1 0 0 0
0 0 0 0 0 -1 2 -1 0 0
0 0 0 0 0 0 -1 2 -1 0
0 0 0 0 0 0 0 -1 2 -1
0 0 0 0 0 0 0 0 -1 1
在一般情况下,输入总是正方形的,但可以是任意大小。步长维度将始终等于 1。
【问题讨论】:
-
输入总是2×2吗?它可以更大,还是非方形(
m×n)?在这种情况下,期望的步骤是什么?每个维度总是 1?还是m-1和n-1? -
输入总是正方形的,但可以是任意大小。步长维度将始终等于 1。
-
感谢您的澄清。然后,您可以使用我答案的最后一部分,
step = [1 1]和R = N-size(miniM,1)+1。下次请尝试在问题文本中从头开始指定所有内容,并避免使用不能反映一般情况的示例
标签: arrays matlab matrix vectorization