gpt4 book ai didi

Chapel 相当于 numpy `arange`/相当于 C for 循环

转载 作者:行者123 更新时间:2023-12-01 09:43:34 29 4
gpt4 key购买 nike

在 Chapel 中以固定增量遍历一系列实数的最惯用方法是什么?

C 等效代码为:

for (x = 0.0; x<1.0; x+=0.1) {}

在 Python/Numpy 中,可以这样写

x = numpy.arange(0.0, 1.0, 0.1)

我可以想象像下面这样编写一个迭代器,但是语言/标准模块中是否内置了一个等效项? (当然,还有编写平行版本的问题)

iter arange(start, stop, step) {
var x = start;
while (x < stop) {
yield x;
x += step;
}
}

最佳答案

只是为了扩展迭代器选项:定义一​​个迭代器然后让你得到很好的数组语义,而不需要额外的工作(感谢 Chapel!)。取上面的代码并用一些测试用例扩展它:

// Define the general case
iter arange(type t, start, stop, step=1:t) {
assert(stop > start, "Stop must be greater than start");
assert(step > 0, "Step must be greater than 0");
var x : t = start;
while (x < stop) {
yield x;
x += step;
}
}

// Overload for type from arguments
iter arange(start:?t, stop:t, step:t=1:t) {
for x in arange(t, start, stop, step) do yield x;
}

// Overload for no start and default step = 1
iter arange(type t, stop) {
for x in arange(t, 0, stop, 1) do yield x;
}

// Overload for no start and default step = 1
iter arange(stop:?t) {
for x in arange(t, 0, stop, 1) do yield x;
}


// Example of simple iteration
for xi in arange(0.0,1.0,0.1) do writef(" %r",xi);
writef("\n");
for xi in arange(real,0,1,0.1) do writef(" %r",xi);
writef("\n");


// But Chapel allows other wonderful things once you
// define an iterator

// Array assignment
var x = arange(real, 0, 1, 0.1);
writeln(x);

// Promote a scalar function
var y = sin(2*pi*arange(real, 0, 1, 0.1));
for yi in y do writef(" %.3r",yi);
writef("\n");

// Step is optional
writeln(arange(real, 0, 10));
writeln(arange(0.0, 10.0));

运行这个会产生

 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
0 0.588 0.951 0.951 0.588 1.22e-16 -0.588 -0.951 -0.951 -0.588 -1.13e-15
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0

关于Chapel 相当于 numpy `arange`/相当于 C for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54080440/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com