IDL学习笔记(6)--矩阵操作

  作者:fbysss
msn:jameslastchina@hotmail.com 
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:IDL

矩阵就是数组。

矩阵初始化:用中括号[]而不是圆括号()

矩阵元素取值:可用中括号或者圆括号

例:

IDL> A=[[1,2],[3,4]]

IDL> print,a

       1       2

       3       4

IDL> print,a[0]

       1

IDL> print,a(1)

       2

IDL> print,a[1,1]

       4

 

获取矩阵的第一行:

print,A[*,0]

IDL> print,a[*,0]

       1       2

获取矩阵的第二行:

print,A[*,1]

获取矩阵的第一列:

print,A[0,*]

IDL> print,a[0,*]

       1

       3

获取ij列元素,A[j,i](注意列在前行在后)

IDL> PRINT,A[0,1]

       3

 

 

A#B相当于 BA,而A*B没有什么意义。

如果不可乘,也会有一个结果,自动转换比如A=(1,2),B=(2,3,4) 

A#B=

           2           4

           3           6

           4           8

B#A=

           2           3           4

           4           6           8

矩阵转置:

TRANSPOSE(A)

或者ROTATE(A,1)

如果仅仅是打印,可以使用PM,A

PM, array 就是 PRINT, TRANSPOSE(array) 
    
    
例子:
    
    

   
   
    
     
   
   
; Define an array arr 
  
  
arr = [[1.0, 3.0], [0.0, 4.0], [2.0, 1.0]] 
  
  
; Print using PM and PRINT 
  
  
PM, arr & PRINT & PRINT, arr 
  
  
IDL prints: 
    
    
1.00000     0.000000      2.00000 
  
  
3.00000      4.00000      1.00000 
  
  

  
  
   
    
  
  
1.00000      3.00000 
  
  
0.000000     4.00000 
  
  
2.00000      1.00000 
  
  

 

求逆矩阵:

MATRIX_POWER(A,-1)

该函数同样可以求矩阵的其他次方

MATRIX_POWER(A,-2)

 

矩阵元素乘方:

A^2

IDL> print,a

       1       2       3

IDL> print,a^2

       1       4       9

要注意:

a^-1语法错误,要写成a^(-1)

a^-1不是a的逆阵,而是内部元素的倒数构成的矩阵,但是有一个问题:都是整数,比如2,倒数不是0.5,而是0

解决办法是,A的其中一个元素必须是浮点数,比如

[1,2],[2,4] 可以写成[1,2.0],[2,4]这样就对了。

如何对不同的列/行增加不同的数值?比如A的第一列加2,第二列加1

IDL> A=[[1,2,3],[4,5,6],[7,8,9]]

IDL> PRINT,A

       1       2       3

       4       5       6

       7       8       9

 

IDL> B=[TRANSPOSE(replicate(2,3)),TRANSPOSE(replicate(1,3)),TRANSPOSE(replicate(0,3))]

IDL> PRINT,B

       2       1       0

       2       1       0

       2       1       0

IDL> PRINT,A+B

       3       3       3

       6       6       6

       9       9       9

更简便的方法,就是直接对某行某列进行运算

第一列加2A(0,*)= A(0,*)+2

 

如何交换一行、列?
交换第一列和第三列过程如下:

IDL> A=[[1,2,3],[4,5,6],[7,8,9]]

IDL> PRINT,A

       1       2       3

       4       5       6

       7       8       9

IDL> TEMP = A[0,*]

IDL> A[0,*]=A[2,*]

IDL> A[2,*]=TEMP

IDL> PRINT,A

       3       2       1

       6       5       4

       9       8       7

行列求和

IDL> A=[[1,2,3],[4,5,6],[7,8,9]]

IDL> print,a

       1       2       3

       4       5       6

       7       8       9

IDL> PRINT,TOTAL(A,1) ;每行求和结果

      6.00000      15.0000      24.0000

IDL> PRINT,TOTAL(A,2) ;每列求和结果

      12.0000      15.0000      18.0000

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值