“数组”的版本间差异

来自Shiyin's note
跳到导航 跳到搜索
第12行: 第12行:
* reverse
* reverse
:数组反向
:数组反向
:例:数组降序排列,结合sort(默认升序)
PRINT, 'Elements of A in descending order: ', A[REVERSE(SORT(A))]


*扩维
*扩维
第17行: 第19行:
IDL>print,fan(indgen(3),2)
IDL>print,fan(indgen(3),2)
IDL>print,fan(indgen(3),2,/trans)
IDL>print,fan(indgen(3),2,/trans)


:例:数组降序排列,结合sort(默认升序)
PRINT, 'Elements of A in descending order: ', A[REVERSE(SORT(A))]


* 多维数组的位置
* 多维数组的位置

2013年6月8日 (六) 06:40的版本

数组

  • REFORM
数组变形,比如data是读入的二维数组,data的第一列可以用 A=reform(data[1,*])
data[1,*]仍然是个二维数组,reform在默认的情况下将这其变为一维数组
  • rotate
可以把数组旋转后组成矩阵,类似于列操作。
a=indgen(10)
b=indgen(10)
c=[rotate(a,1),rotate(b,10]
  • reverse
数组反向
例:数组降序排列,结合sort(默认升序)
PRINT, 'Elements of A in descending order: ', A[REVERSE(SORT(A))]
  • 扩维
fan程序(http://astro.berkeley.edu/~johnjohn/idl.html#FAN )
IDL>print,fan(indgen(3),2)
IDL>print,fan(indgen(3),2,/trans)
  • 多维数组的位置
用array_indices
 array = RANDOMU(seed, 10, 10)  
 mx = MAX(array, location) 
 ind=array_indices(array,location)
 print, ind, array[ind[0],ind[1]], format = '(%"Value at [%d, %d] is %f")'  
 IDL prints:
 Value at [3, 6] is 0.973381 
  • 数组随机打乱(shuffle)
Arr_S=arr[sort(randomu(seed,N_elements(arr))]

结构

  • 结构很容易增加一个tag,比如
A= {tag1:0.,tag2:'Name'}
B=create_struct(A,'tag3',1L)

但是如果A是结构数组了,就不能再这样操作。

结果数组经常被用来读入数据文件,如果该数据文件加上一列数据,如何较方便的操作。

一种方法如下:
A= {tag1:0.,tag2:'Name'}
B= {tag1:1.,tag2:'Name2',tag3:10L}
A2=  replicate(A,10)
B2 = replicate(B,10)
struct_assign,A,B ;把A的数值付给B
print,B ;可以看到B的前两列已经变成A的数值,但B的第三列被充0,所以这时候可以再给B.tag3赋值。
还有一种方法,但没上面那么直观
str={a: 0l, b: }
str_arr=REPLICATE(str,10)
ref_str = reform_struct(str_arr, /tag_array, 10)
ref_str = create_struct(ref_str, 'c' ,make_array(10))
help, ref_str, /str

还有一共jjadd_tag的程序(http://astro.berkeley.edu/~johnjohn/idl.html#JJADD_TAG)

IDL>  struct = {a: 0., b: 'blah'}
IDL> a=replicate(struct,2)
IDL> c=jjadd_tag(a,'new',0b)