IDL矩阵运算

IDL矩阵运算

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

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

IDL> PRINT,A[0,1]

       3

A#B相当于 B乘A,而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

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

第一列加2:A(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

原文:http://blog.csdn.net/fbysss/archive/2008/07/26/2712355.aspx