我正在编写一个对矩阵进行操作的脚本,我遇到了需要将先前矩阵的对角线之和添加到新矩阵的对角线元素的问题。到目前为止,我为这个特定功能编写的代码(在下面有更详细的描述)是:
t = 1;
for k = (m-1):-1:-(m-1)
C = bsxfun(@plus, diag(B, k), d);
g(t) = sum(diag(B, k));
t = t + 1;
end
其中 d 是一个 1x3 数组,C 应该是一个 3x3 数组;但是,C 以 1x3 数组的形式输出,第一条对角线相加并添加到 d,然后主对角线相加并添加到 d,最后一条对角线相加并添加到 d。
有没有一种方法可以让 C 的值使得第一个对角线是它的各个元素添加到 d 的最后一个元素的总和,主对角线的各个元素添加到 d 的中间元素,并且底部对角线的元素添加到 d 的第一个元素? (同时仍然适用于任何数组大小?)
这是一张描述我想要实现的目标的图片:
谢谢!
最佳答案
您可以使用 toeplitz
生成包含需要添加到原始矩阵的值的矩阵:
M = [5 5 5; 7 7 7; 9 9 9]; %// data matrix
v = [1 11 4 3 2]; %// data vector
S = toeplitz(v);
S = S(1:(numel(v)+1)/2, (numel(v)+1)/2:end);
result = M+S;
或者,如@thewaywewalk 所述,您可以更直接地执行此操作,如下所示:
M = [5 5 5; 7 7 7; 9 9 9]; %// data matrix
v = [1 11 4 3 2]; %// data vector
result = M + toeplitz(v(size(M,1):-1:1), v(size(M,2):end));
关于arrays - 在matlab中使用逐元素加法将值添加到矩阵的对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000277/