matlab - 根据给定矩阵的对角线和反对角线创建新矩阵

我想根据以下规则从矩阵 A 创建矩阵 B:

  • 非对角元素 A 类似于 B 的非对角元素。

  • A的主对角线是B

    的反对角线
  • A 的反对角线是B 的主对角线。

例如:

A = [ 1  2  3  4;
      7  8  9 10;
     13 14 15 16; 
     19 20 21 22 ];
B = [ 4  2  3  1;
      7  9  8 10;
     13 15 14 16;
     22 20 21 19 ];

如何在给定 A 的情况下创建 B

最佳答案

您可以创建所有索引,然后这是一个单一的分配。

% Get size of square matrix A
n = size(A,1);
% Indicies are 1:n^2 by default
idx = 1:n^2;
% Swap diagonal and antidiagonal indices
idx( [1:(n+1):n^2, n^2-n+1:1-n:n] ) = [n^2-n+1:1-n:n, 1:(n+1):n^2];
% Use the indexing array to create B from A, reshape to be n*n
B = reshape( A( idx ), n, n );

示例 A 的输出:

B =
     4     2     3     1
     7     9     8    10
    13    15    14    16
    22    20    21    19

https://stackoverflow.com/questions/53869720/

相关文章:

postgresql - . 时如何将密码传递给 pg_dump 10主目录中的 pgpass 不是

python - FlaskForm 验证码 : checking if a user alread

python - 无法使用 python 3.72 连接 firebase

python - Pandas - 从索引中提取月份和年份

macos - 如何在 macOS 上获取 awk 版本?

angular - ng2图表多图表更新

vue.js - 如何使用 Nuxt.js 在 vuex 状态中获取本地存储数据

node.js - 如何将字符串作为 gzip Nodejs 上传到 s3

python - 如何修复-没有这样的表 : main. auth_user__old

python - 使用 Python 插入多个 MySQL 记录。错误 : "Python ' tu