arrays - 在matlab中使用逐元素加法将值添加到矩阵的对角线

标签 arrays matlab matrix

我正在编写一个对矩阵进行操作的脚本,我遇到了需要将先前矩阵的对角线之和添加到新矩阵的对角线元素的问题。到目前为止,我为这个特定功能编写的代码(在下面有更详细的描述)是:

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 的第一个元素? (同时仍然适用于任何数组大小?)

这是一张描述我想要实现的目标的图片:

Adding sums to diagonals

谢谢!

最佳答案

您可以使用 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/

相关文章:

function - 对零进行特殊处理的 matlab 内联函数

matlab - 指定间隔宽度的条形图条

javascript - 如何在二维数组中创建 'radial gradient' 值?

python - 为什么这个巨大的(非稀疏的)numpy 矩阵适合 RAM

javascript - 如何使用 javascript 访问 json 对象?

PHP/mySQL - 在关联数组中选择 WHERE 多个值

matlab - 为什么 `minmax` 比连续的 `min` 和 `max` 花费的时间更长?

matlab - 最接近第一个索引的每行中的众数 - MATLAB

arrays - 循环遍历多个图像的数组以单独上传到AWS s3 ReactJS

java - 数组的内存地址 - Java