[原] IDL的数组存储是行顺序,下标引用是列在前
Posted by bianbian on 2008-03-17 01:29
本文Tags: IDL, row major, 存储, 行优先
IDL的数组在内存中存储还是以行顺序的,只是多维下标引用的时候列为先。即:
A=
[r r r]
[g g g]
[b b b]
在内存中是 rrrgggbbb(和C是一样的!fortran是rgbrgbrgb)
而引用的时候列在前:(C是行在前!)
A[0,0] A[1,0] A[2,0]
A[0,1] A[1,1] A[2,1]
A[0,2] A[1,2] A[2,2]
三维的情况和C也一样(注意,IDL和C唯一的差别就是IDL的下标列在前,然后是行);存储结构一致也就意味着C里的多维数组内存块可以直接丢到IDL里处理。其实我觉得IDL在下标上太小白了,干嘛不和C保持一致?某IDL大牛说:之所以下标在前,是为了更直观的知道X方向上有几个、Y方向上有几个。比如:A[3, 2],X方向有3个,Y方向有2个(2行3列):Is IDL column-major or row-major?
某本书(似乎国内的书都不认真写 - -)说IDL是列顺序的,这是不对的。可以拿三维数据做简单试验(也便于对下标引用理解):
IDL> a=bindgen(3,3,3) IDL> print,a 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 IDL> print,a[1,0,*] 1 10 19 IDL> print,a[*,1,1] 12 13 14标签: IDL, row major, 存储, 行优先
遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道
相关日志
Posted in C/C++, ENVI & IDL, Technology | 1 Comment »