【问题标题】:Applying a threshold to all values in an array对数组中的所有值应用阈值
【发布时间】:2019-03-19 19:49:30
【问题描述】:

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

但我想知道是否有一些更优雅的方法使用这些神奇的命令,如过滤器、地图、平面图等。

【问题讨论】:

  • array.map { $0 > 0.3 ? $0 : 0 }
  • ahhhhhhh...我可以在地图里面做吗?惊人。请让您的评论成为答案。

标签: arrays swift


【解决方案1】:

Accelerate framework 有一个专用函数 vDSP_vthresD 用于此目的:

零填充的向量阈值;双精度。

例子:

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]

【讨论】:

    【解决方案2】:

    你可以试试这个地图

    var resultArray = myArray.map({$0 > 0.3 ? $0 : 0})
    

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 2018-02-07
      • 2017-07-10
      • 2011-04-23
      • 2015-04-26
      • 2013-12-21
      • 2021-02-10
      • 2019-09-14
      • 2019-05-17
      相关资源
      最近更新 更多