bianbian coding life

便便代码人生: 关注技术, 翻译文档, 偶尔动动手

[原] IDL的数组存储是行顺序,下标引用是列在前

Posted by bianbian on 2008-03-17 01:29


本文Tags: , , ,

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
标签: , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C/C++, ENVI & IDL, Technology | 1 Comment »