如何获取Chapel中多维数组的各维度大小?
获取Chapel数组各维度大小的方案
针对你定义的二维数组:
var arr : [1..10] [1..5] int;
1. 最简方式:使用shape属性
数组的shape属性会直接返回包含各维度大小的元组,完全满足你获取(10,5)的需求:
let dimSizes = arr.shape; // dimSizes = (10,5)
2. 通过Domain维度信息手动获取
如果需要单独获取某一维度的大小,可通过数组的domain属性操作:
- 第一维度大小:
arr.domain.dim(0).size - 第二维度大小:
arr.domain.dim(1).size
你之前调用arr.domain.dim(1).size报错,大概率是因为Chapel中dim()方法的维度索引从0开始——如果你的代码里误将第一维度用了dim(1),会因索引越界报错;或者存在拼写错误(Chapel是大小写敏感的,size必须小写)。
封装成通用方法
如果需要一个通用的输入数组返回维度大小元组的方法,可以这样写:
proc getDimensionSizes(arr: []?D) { return arr.shape; }
调用getDimensionSizes(arr)即可得到(10,5)。
内容的提问来源于stack exchange,提问作者Soroush Vahidi
相关产品推荐
相关产品推荐

