Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将矩阵对角转换为列

将矩阵对角转换为列
EN

Stack Overflow用户
提问于 2017-01-04 04:50:54
回答 2查看 338关注 0票数 1

我正在寻找一种形式的矩阵运算:B = M*A*N,其中A是一些一般的方阵,MN是我想要找到的矩阵。使得B的列是A的对角线。第一列主对角线,第二对角从主对角线移1,以此类推。

例如,在MATLAB语法中:

代码语言:javascript
运行
AI代码解释
复制
A = [1, 2, 3 
     4, 5, 6 
     7, 8, 9]

代码语言:javascript
运行
AI代码解释
复制
B = [1, 2, 3 
     5, 6, 4 
     9, 7, 8]

编辑:似乎不存在纯线性代数解。所以我会更精确地说明我想做的事情:

对于一些大小为v的向量1 x m。然后定义C = repmat(v,m,1)。我的矩阵是A = C-C.';。因此,A本质上是v中所有值的差异,但我只对值之间的差异感兴趣。这些是A的对角线;但是m太大了,因此构造这样的m x m矩阵会导致内存不足的问题。我正在寻找一种方法,以尽可能有效地提取这些对角线(在MATLAB中)。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-04 15:58:03

如果你实际上不是在寻找线性代数解,那么我会认为,用两个矩阵乘法构造三个与A相同大小的矩阵,在时间和空间复杂度上都是非常低效的。考虑到我对线性代数的知识有限,我甚至不确定是否有可能找到矩阵解,但即使是这样,也肯定会很混乱。

因为您说您只需要一些对角线上的值,所以我只能使用diag构造那些对角线。

代码语言:javascript
运行
AI代码解释
复制
A = [1 2 3;
     4 5 6;
     7 8 9];
m = size(A, 1);   % assume A is square
k = 1;            % let's get the k'th diagonal
kdiag = [diag(A, k); diag(A, k-m)];

kdiag =

   2
   6
   7

对角线0是主对角线,对角线m-1 (对于mxm矩阵)是最后。因此,如果您想要所有的B,您可以很容易地循环:

代码语言:javascript
运行
AI代码解释
复制
B = zeros(size(A));
for k = 0:m-1
   B(:,k+1) = [diag(A, k); diag(A, k-m)];
end

B =

   1   2   3
   5   6   4
   9   7   8

从评论中:

对于v个大小为1xm的向量。然后是B=repmat(v,m,1)。我的矩阵是A=B.‘;A本质上是v中所有值的差异,但我只感兴趣的是直到值之间的某种距离的差。

比方说

代码语言:javascript
运行
AI代码解释
复制
m = 4;
v = [1 3 7 11];

如果你构建整个矩阵,

代码语言:javascript
运行
AI代码解释
复制
B = repmat(v, m, 1);
A = B - B.';

A =
    0    2    6   10
   -2    0    4    8
   -6   -4    0    4
  -10   -8   -4    0

主要对角线是零,所以这不是很有趣。下一个对角线,我将称之为k = 1

代码语言:javascript
运行
AI代码解释
复制
[2 4 4 -10].'

您可以通过移动A的元素来构造这个对角线,而无需构造v甚至B

代码语言:javascript
运行
AI代码解释
复制
k = 1;
diag1 = circshift(v, m-k, 2) - v;

diag1 =

    2    4    4  -10

主对角线由k = 0给出,最后对角线由k = m-1给出。

票数 1
EN

Stack Overflow用户

发布于 2017-01-05 13:34:40

您可以使用函数toeplitz来为重组创建列索引,然后将这些索引转换为用于重新排序A线性指数,如下所示:

代码语言:javascript
运行
AI代码解释
复制
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> n = size(A, 1);
>> index = repmat((1:n).', 1, n)+n*(toeplitz([1 n:-1:2], 1:n)-1);
>> B = zeros(n);
>> B(index) = A
B =
     1     2     3
     5     6     4
     9     7     8

这将推广到任意大小的平方矩阵A

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41464274

复制
相关文章
对角矩阵
对角矩阵(diagonal):M是一个对角矩阵,则当且仅当i≠j时,M(i,j)=0。 一个rows×rows的对角矩阵D可以表示为 一个二维数组element[rows][rows],其中element[i-1][j-1]表示D(i,j)。 这种表示法需要rows²个数据类型为T的数据空间。 对角矩阵最多含有rows个非0元素,因此可以用一维数组element[rows]来表示对角矩阵,其中element[i-1]表示D(i,i) 所有未在一维数组中出现的矩阵元素均为0.这种表示法仅仅需要rows
青木
2018/05/28
1.1K0
严格对角占优矩阵
定义:对于一个n阶方阵A,主对角元素的绝对值大于该行其余元素的绝对值之和,即|aii|>Σ|aij| ( j /= i )。则称矩阵A是严格对角占优矩阵。对列同样成立。
fem178
2019/07/08
10K0
LeetCode 1329. 将矩阵按对角线排序
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat2 开始的 矩阵对角线 将会经过 mat2、mat3 和 mat4 。
freesan44
2021/09/05
4630
LeetCode 1329. 将矩阵按对角线排序
LeetCode 1329. 将矩阵按对角线排序
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。
freesan44
2021/12/06
4580
LeetCode 1329. 将矩阵按对角线排序
对角矩阵单位矩阵_矩阵乘单位矩阵等于
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166559.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
1.7K0
对角矩阵单位矩阵_矩阵乘单位矩阵等于
matlab习题 —— 创建 50 行 50 列全零矩阵、全 1 矩阵、单位矩阵、对角矩阵,输出矩阵第135号元素。
创建 50 行 50 列全零矩阵、全 1 矩阵、单位矩阵、对角矩阵,输出矩阵第 135 号元素。
繁依Fanyi
2023/05/07
3990
matlab习题 —— 创建 50 行 50 列全零矩阵、全 1 矩阵、单位矩阵、对角矩阵,输出矩阵第135号元素。
复试–矩阵行列对角和
4 15 8 -2 6 31 24 18 71 -3 -9 27 13 17 21 38 69
全栈程序员站长
2022/06/29
4030
如何将R语言普通矩阵转换为非负矩阵
# =============================================================== # =============================================================== setwd('C:\\Users\\czh\\Desktop') library(Matrix) rm(list=ls()) options(stringsAsFactors = F) library(ConsensusCluste
用户1359560
2020/06/19
1.3K0
如何将R语言普通矩阵转换为非负矩阵
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
12K0
原 三对角矩阵
**三对角矩阵(tridiagonal):**M是一个三对角矩阵,当且仅当|i-j|>1时,M(i,j)=0。 在一个rows×rows的三对角矩阵中,非0元素排列在如下三条对角线上: 1)主对角
青木
2018/05/28
1.1K0
书籍作者的排名输入为列,如何快速转换为矩阵?
1、点击[文本] 2、按<Ctrl+F>键 3、点击[替换] 4、点击[查找内容] 5、点击[替换为] 6、点击[全部替换] 7、点击[确定]
裴来凡
2022/05/28
5880
书籍作者的排名输入为列,如何快速转换为矩阵?
求矩阵主对角线元素及副对角线元素之和
正常秋招中,笔试题目一般一张卷子有选择题、填空题、简答题、编程题等题目(如大疆、景嘉微、小米等大部分企业)。也有一些企业只有两道编程题,一道50分,答对一道甚至一道case 60%就有面试机会(如阿里)。
Jasonangel
2021/05/28
1.8K0
dataframe行变换为列
使用 import org.apache.spark.sql.functions 里面的函数,具体的方式可以看 functions :
机器学习和大数据挖掘
2019/07/01
1.1K0
如何求逆矩阵_副对角线矩阵的逆矩阵怎么求
作为一只数学基础一般般的程序猿,有时候连怎么求逆矩阵都不记得,之前在wikiHow上看了一篇不错的讲解如何求3×3矩阵的逆矩阵的文章,特转载过来供大家查询以及自己备忘。当然这个功能在matlab里面非常容易实现,只要使用inv函数或A^-1即可,但是有时候参加个考试什么的还是要笔算的哈哈~
全栈程序员站长
2022/09/25
1.7K0
如何求逆矩阵_副对角线矩阵的逆矩阵怎么求
每日一练(矩阵对角线求和)
矩阵对角线求和 1.题目描述 求一个3×3矩阵对角线元素之和。 2.格式与样例 输入格式 矩阵 输出格式 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7 3.参考答案1 #include<stdio.h> int main() { int a[][]; int i,j,sum1 = ,sum2 = ; for(i=; i<; i++){ for(j=; j<; j++){ scanf("%d",&a[
pigeon
2022/04/11
4100
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.7K0
数据处理第2节:将列转换为正确的形状
博客原文:https://suzan.rbind.io/2018/01/dplyr-tutorial-1/ 作者:Suzan Baert
用户1359560
2018/09/29
8.1K0
python转置矩阵代码_python 矩阵转置[通俗易懂]
5.矩阵转置 给定:L=[[1,2,3],[4,5,6]] 用zip函数和列表推导式实现行列转def transpose(L): T = [list(tpl) for tpl in zip(*L)] return T
全栈程序员站长
2022/08/22
5.7K0
矩阵转置与矩阵相乘
写这篇博客的原因是为了记录一下矩阵转置与矩阵相乘的实现代码,供日后不时之需。直接原因是今晚(2016.09.13)参加了百度 2017 校招的笔试(C++岗),里面就有一道矩阵转置后相乘的在线编程题。考虑到日后笔试可能会用到,特此记录,也希望能够帮助到需要的网友。
全栈程序员站长
2022/07/04
7730
矩阵转置与矩阵相乘
对角化可逆矩阵怎么求_正交矩阵一定可逆吗
本文给出了一种不同于传统方法的矩阵对角化方法,利用矩阵的初等变换,先求出矩阵的特征根与特征向
全栈程序员站长
2022/11/15
7120

相似问题

将矩阵转换为对角矩阵

10

将列表转换为对角矩阵

11

将列向量转换为扩展对角线矩阵

239

将矩阵次对角变换为r列的有效算法

24

将列表转换为对角矩阵DataFrame

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档