Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays swift数组每n个元素的平均值_Arrays_Swift - Fatal编程技术网

Arrays swift数组每n个元素的平均值

Arrays swift数组每n个元素的平均值,arrays,swift,Arrays,Swift,我有一个数组,其中我需要从一个特定元素开始的每n个元素的平均值(在本例中,每4个,从1开始)。最快的方法是什么 我当前的方法是使用循环开关语句的for循环,但我想知道是否有更快的方法 我想知道这样的事情是否可行: let num_array = [1,2,3,4,5,6,7,8] let mean4th = num_array[Array(stride(from: 1, to: num_array.count, by: 4))].reduce(0, +) / (num_array.count /

我有一个数组,其中我需要从一个特定元素开始的每n个元素的平均值(在本例中,每4个,从1开始)。最快的方法是什么

我当前的方法是使用循环开关语句的for循环,但我想知道是否有更快的方法

我想知道这样的事情是否可行:

let num_array = [1,2,3,4,5,6,7,8]
let mean4th = num_array[Array(stride(from: 1, to: num_array.count, by: 4))].reduce(0, +) / (num_array.count / 4)
希望获得
平均值4th=3
(即(1+5)/2)

这将返回错误

Cannot subscript a value of type 'Array<UInt8>' with an index of type 'Array<Int>'
无法用“Array”类型的索引为“Array”类型的值下标

…我正在努力解决这一问题

我不明白您在评论中所说的
Hz
是什么意思,但一种方法是生成您将访问的所有元素的索引,并从中进行迭代:

let num_array = [1,2,3,4,5,6,7,8]
let indices = Array(stride(from: 0, to: num_array.count, by: 4))

let mean = Double(indices.reduce(0) { $0 + num_array[$1] }) / Double(indices.count)

数组不能使用序列作为其下标,但可以用不同的方式编写

  let mean4th = stride(from: 0, to: num_array.count-1, by: 4).reduce(0) {$0 + num_array[$1] } / (num_array.count / 4)
使用索引(代码不同)的想法是正确的,但在非常大的阵列上,构建临时索引阵列增加了处理时间(在500K元素阵列上增加了5倍)


我在MacBookPro上玩500K(在操场上)的时间是0.41ms,远低于60Hz所需的16.7ms。你可能做的比这个平均的计算要多,虽然速度越快越好

为什么要让它更快、可读性更低?你必须每秒启动这个代码x次吗?它适用于一个有数千个数字的数组?的确如此。我想让它在500k元素阵列上运行,在60 HzI时,目前使用for loop可以获得约25 Hz的频率。您能否为您的示例提供预期的输出?补充,感谢指针