1

它就像所有好故事一样开始,我有一个矩阵A,我想找到最大值,有时是整个事情,有时是沿行。

var dom = {1..2, 1..5};
var m: [dom] real;
m[1,..]  = [1.0, 2.0, 3.1, 4.8, 5.6];
m[2,..]  = [2.0, 3.0, 4.1, 5.8, 6.6];
writeln(m);
writeln(max(m));

但这里没有爱,它只是在我身上大便:

maxy.chpl:5: error: unresolved call 'max([domain(1,int(64),false)] real(64))'
$CHPL_HOME/modules/internal/ChapelBase.chpl:614: note: candidates are: max(x, y)

我应该使用reduce还是有一些更简单的语法?

4

1 回答 1

2

使用最大减少是今天完成此任务的最简单方法:

var mx = max reduce(m);

但是,对于示例中显示的问题大小,并行最大减少可能是矫枉过正。如果性能很重要,最好编写自己的proc max(arr: [])过程来遍历数组并找到最大的元素。

Chapel 已经支持可变参数的内置max()过程,但它不支持数组。在回答这个问题时,我想知道是否应该...

于 2017-08-31T17:53:19.000 回答