Arrays swift数组每n个元素的平均值
我有一个数组,其中我需要从一个特定元素开始的每n个元素的平均值(在本例中,每4个,从1开始)。最快的方法是什么 我当前的方法是使用循环开关语句的for循环,但我想知道是否有更快的方法 我想知道这样的事情是否可行: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 /
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的频率。您能否为您的示例提供预期的输出?补充,感谢指针