在IDL中基于公式创建二维数组及foreach循环故障求助
IDL数组赋值与二维公式数组生成方案
1. 循环仅最后一列生效的修复方案
该问题的核心原因是IDL中foreach迭代逻辑存在兼容歧义:foreach默认遍历数组的元素值而非索引,即使本例中xx的元素值与索引恰好重合,部分版本的IDL对foreach内的数组切片赋值支持不稳定,替换为显式遍历索引的标准for循环即可解决:
pxx=fltarr(10, 10) xx = indgen(10) yy = indgen(10) ; 替换为for循环遍历索引 for k=0, n_elements(xx)-1 do begin pxx[k,*]=3*k endfor print, pxx
2. 生成符合x²+y公式的二维数组
IDL原生支持数组广播运算,无需写循环即可快速生成目标数组,运算效率远高于循环实现:
x = indgen(10) y = indgen(10) ; 将x转为10行1列的列向量,y保持1行10列的行向量,运算时自动广播为10*10二维数组 pxx = (reform(x, 10, 1))^2 + y
如果需要用循环逻辑方便理解,也可以用双层for循环实现:
pxx = fltarr(10, 10) x = indgen(10) y = indgen(10) for i=0, 9 do begin for j=0,9 do begin pxx[i,j] = x[i]^2 + y[j] endfor endfor
生成数组后直接调用IDL的contour程序即可绘制等高线:
contour, pxx, x, y, title='x²+y等高线图'
内容的提问来源于stack exchange,提问作者Francesco Azzollini
相关产品推荐
相关产品推荐

