我有一个包含 1000 个元素的数组,这些元素在 0 到 1 之间波动。
我想扫描该数组并将低于特定阈值的所有值归零,比方说,0.3
。
我知道我可以做类似的事情
let filteredArrayOnDict = myArray.filter { $0 > 0.3}
我将得到一个包含 0.3
以上元素的新数组。但这不是我想要的。我想将低于 0.3 的元素归零,并使结果数组的元素数量保持不变。
我可以像这样遍历数组
var newArray : [Double] = []
for item in myArray {
if item > 0.3 {
newArray.append(item)
} else {
newArray.append(0)
}
}
但我想知道是否有一些更优雅的方法使用这些神奇的命令,如 filter、map、flatmap 等。
最佳答案
Accelerate framework有专门的功能vDSP_vthresD
为此目的:
Vector threshold with zero fill; double precision.
例子:
import Accelerate
let array = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
var threshold = 0.3
var result = Array(repeating: 0.0, count: array.count)
vDSP_vthresD(array, 1, &threshold, &result, 1, vDSP_Length(array.count))
print(result) // [0.0, 0.0, 0.0, 0.3, 0.4, 0.5, 0.6]
关于arrays - 将阈值应用于数组中的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55248975/