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

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
IDL中,BSQ(Band SeQuential)矩阵是一种用于存储多波段(多频谱)遥感影像数据的数据结构。它将每个像素的每个波段的值按照波段顺序存储起来,形成一个三维数组。BSQ矩阵的维度通常为[bands, rows, columns],其中bands表示波段数量,rows表示行数,columns表示列数。 BIL(Band InterLeaved by Line)矩阵也用于存储多波段遥感影像数据,但与BSQ矩阵不同的是,BIL矩阵将每个像素的所有波段的值按照像素顺序交错存储,形成一个二维数组。BIL矩阵的维度通常为[rows, columns * bands]。 BIP(Band InterLeaved by Pixel)矩阵也用于存储多波段遥感影像数据,与BSQ和BIL矩阵不同的是,BIP矩阵将每个波段的所有像素的值按照波段顺序交错存储,形成一个二维数组。BIP矩阵的维度通常为[rows * columns, bands]。 这三种矩阵的格式在存储遥感影像数据时各有优缺点。BSQ矩阵在处理一些基于波段的统计分析和算法时较为高效,因为它在内存中保持了每个波段的连续性。BIL矩阵在进行像素级的遥感影像处理时更为方便。BIP矩阵则更适用于像素级和波段级操作相结合的影像处理任务。 IDL提供了一系列用于读取、写入和处理这些矩阵格式的函数和命令,使用户能够方便地处理和分析遥感影像数据。可以根据具体的需求选择适合的矩阵格式,并利用IDL提供的工具进行相关的数据处理和分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值