arrays - 将阈值应用于数组中的所有值

标签 arrays swift

我有一个包含 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/

相关文章:

swift - UIImage从对象c到swift并且图像大小不好

python - 如何将掩码从数组应用到numpy中的另一个矩阵

java - 循环问题导致在退出程序之前重复输出

java - 在Java中播放整数/双数组

ios - 如何删除 iOS swift 项目中的部分 pod 文件?

ios - Firebase 存储不显示图像

javascript - 为什么数组显示为字符串,但当我将其打印到控制台时,它却将其打印为数组? ReactJS 功能组件

javascript - 如何在 JavaScript 中对使用逗号分隔的数字 _and_ 符号的字符串数组进行最佳排序

Swift UITextField 边框扩展

swift - 将使用 AudioKit 录制的音频文件读取到 AVPlayer 实例中时出现问题