Swift 数组中最大值及其索引的高效算法

2023-12-03

我编写了一个 Swift 算法,用于查找 Swift 数组中的最大值及其索引。这是受到 Matlab 和 Octave 中“max.m”函数的启发。

这里的专家能否提出一种提高该算法速度的方法?我的意思是它是否可以做得更快,或者您认为这对于大型数组(有时 15000 个样本)来说是一个合理的方法。

public func max (y: [Double]) -> (Int, Double) {

let inLen = y.count

var out = Double()
var outp = Int()

if (1 == inLen) { // if only one element
    out = y[0]
    outp = 0
} else if (0 == inLen) { // if no elements
    out = -1
    outp = -1
} else {
    out = y[0]
    outp = 0
    for ii in 1...inLen-1 {
        if (out<y[ii]){
            out = y[ii]
            outp = ii
        }
    }
}
return (outp, out)
}

// Call the function

let y: [Double] = [3, 4, 5, 6, 7, 8, 9, 100, 100, 11, 12, 13, 14, 15, -8, -7, -7, 99]
let (ind, value) = max(y: y)
print(ind) // 7
print(value) // 100.0 

您可以使用vDSP_maxviD)()Accelerate 框架中的功能。 vDSP 函数使用vDSP_Length (aka UInt)对于数组计数和索引,因此您必须将 索引到Int实现 Swift 互操作性。

import Accelerate

let array: [Double] = ...

var elem = 0.0
var vdspIndex: vDSP_Length = 0
vDSP_maxviD(array, 1, &elem, &vdspIndex, vDSP_Length(array.count))
let idx = Int(vdspIndex)

print("max:", elem, "at index:", idx)

事实证明这比你的显式快大约 5 倍 循环 15,000 个元素数组(在以发布模式编译的 iMac 上)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 数组中最大值及其索引的高效算法 的相关文章

  • 从 Firebase Swift 检索信息的好方法

    我和我的朋友正在 swift 上开发一个 IOS 项目 并集成了 新的 Firebase 我们能够写入 Firebase 数据库 但是我们在检索数据时遇到了问题 我们有一个 tableView 控制器 我们希望从 Firebase 数据库填
  • Swift 和 Cocoapods - 缺少必需的模块

    我正在尝试制作一个 Swift 框架 该框架依赖于两个库 阿拉莫菲尔 https github com Alamofire Alamofire and SwiftyJSON https github com SwiftyJSON Swift
  • Swift 闭包异步执行顺序

    在我的模型中 有函数来获取需要完成处理程序作为参数的数据 func fetchMostRecent completion sortedSections TableItem gt self addressBook loadContacts c
  • 快速转换:错误 - CGPathAddArc

    我正在尝试将我的 Swift 2 代码转换为最新语法 Swift 3 我收到以下错误 Nil 与预期的参数类型 UnsafePointer 不兼容 斯威夫特2代码 CGPathAddArc 路径 nil overlayView frame
  • 遵守协议并保持财产私有

    我需要将符合类中的协议属性用作私有属性 但编译器拒绝这样做 我怎样才能实现呢 protocol ProtocolX class var x Int get set func performAnyActionOnX extension Pro
  • 在堆栈视图内的 Uilabel 之间创建垂直线 [重复]

    这个问题在这里已经有答案了 我想在代码中创建一个带有自定义标头的 UICollectionView 因此 我创建了 UICollectionViewCell 的子类来描述我的自定义标头 我想在标题中以水平线显示五个标签 因此 我创建了五个标
  • 循环结束后从头开始重新迭代 for 循环 - JS

    我有一个数组和一个对象数组 我基本上需要将数组的第一个元素映射到数组内对象的第一个元素 依此类推 两个数组的长度都可以是可变的 并且一旦循环结束 循环应该从头开始 但是 我不确定是否再次开始循环 这是我的代码 const colors 7c
  • 在 for-in 循环中使用尾随闭包

    我在用着map for in 循环中的数组函数如下 let numbers 2 4 6 8 10 for doubled in numbers map 0 2 compile error print doubled 这会产生编译错误 使用未
  • 检测 AVPlayerViewController 是否正在播放视频或正在缓冲并向播放器添加覆盖

    我必须检测视频是否处于播放模式或缓冲模式 我正在从 URL 加载视频 我已经尝试了下面的代码 我可以在视频开始播放后进行跟踪 但不能在视频处于缓冲状态时进行跟踪 另外 我想在我的播放器中添加覆盖视图 我尝试在 AVPlayer 中添加叠加层
  • 如何在 UICollectionView PerformBatchUpdates 块中排序移动、插入、删除和更新?

    In my UICollectionView 我使用一个简单的自定义对象数组来生成和显示单元格 有时数据会发生变化 我想一次性为所有变化添加动画效果 我选择通过跟踪第二个数组中的所有更改 比较两个数组并在一个数组内生成一组移动 插入 删除和
  • Swift 3 - 如何从另一个视图插入 TableView 单元格?

    我正在使用 Swift 3 Xcode 8 2 我试图弄清楚如何从选项卡式视图控制器的另一个选项卡将单元格插入到表视图中 我的表视图 class MyTableView UITableViewController var items Ite
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • 如何将具有对象数据类型的 Numpy 2D 数组转换为常规的浮点数 2D 数组

    作为我正在开发的更广泛程序的一部分 我最终得到了包含字符串 3D 坐标等的对象数组 所有这些都混合在一起 我知道与结构化数组相比 对象数组可能不是很受欢迎 但我希望在不更改大量代码的情况下解决这个问题 假设我的数组 obj array 有
  • Matlab中反转一位逻辑位

    是否存在更好的方法来反转 X 的元素 gt gt X dec2bin 10 X 1010 我这样做了 x i num2str 1 str2num x i 如果我理解正确的话 你想将一位设置为 1 使用bitset bitset x bitN
  • 将多个数组合并为一个数组

    如何将多个数组合并为一个二维数组 鉴于我有以下输入 var arr1 1 2 3 var arr2 a b c var arr3 aa bb cc 我需要这样的输出 1 a aa 2 b bb 1 c cc 我认为你想要的是将三个数组组合成
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • Perl 中令人困惑的文件句柄

    一直在使用以下脚本 但仍然无法理解两种不同 类型 的文件句柄形式背后的含义 任何见解将不胜感激 usr bin perl use warnings use strict open FH example txt or die while
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i

随机推荐

  • PHP 中的枚举

    我知道 PHP 还没有原生枚举 但我已经习惯了 Java 世界中的它们 我很乐意使用枚举来提供 IDE 的自动完成功能可以理解的预定义值 常量可以解决问题 但是存在命名空间冲突问题 或者实际上because 它们是全球性的 数组不存在命名空
  • 在C#中发送TCP数据包

    我想在 C 中发送 TCP 数据包 带有自定义标头 构建此类数据包没有问题 并且我将数据存储在字节数组中 但是我怎样才能通过套接字发送这个数据包呢 我尝试过这样的事情 using Socket sock new Socket Address
  • 将附加组件集成到自定义 Firefox 版本中

    我正在制作一个自定义的 Firefox 版本 我想将我的附加组件 附加 SDK 集成到构建中 我更喜欢这样做 而不是直接与 Firefox 代码集成 实现这一目标的最佳方法是什么 我正在考虑将其放入 浏览器 扩展 目录 如果这是一个好主意
  • 查找大写字符然后添加空格

    我购买了 SQL World 城市 州数据库 在州数据库中 州名称被集中在一起 示例 北卡罗来纳州 或 南卡罗来纳州 SQL中有没有办法循环查找大写字符并添加空格 这样 北卡罗来纳州 就变成了 北卡罗来纳州 创建这个函数 if object
  • java 8 中箭头运算符内部如何工作? [复制]

    这个问题在这里已经有答案了 我知道箭头的左侧有参数 箭头的右侧是参数所在的函数 但是 我想知道java 8如何映射左侧和右侧并转换为函数 那里会发生什么 我在哪里可以找到信息 当你有一个 gt javac 编译器添加一个包含代码内容的静态方
  • 如何在 React 中下载图像?

    我想尝试通过单击按钮来下载图像 但是当我单击按钮时 它不是下载图像 而是直接打开图像 但是我想下载图片 那么在React中如何下载图片呢 a href https timesofindia indiatimes com thumb msid
  • 如何使用 python pyhs2 连接到 hive?

    我正在尝试使用访问配置单元pyhs2 我尝试了以下代码 示例 py import pyhs2 conn pyhs2 connect host localhost port 10000 authMechanism None user None
  • Shibboleth 可以与 Windows Azure 访问控制服务集成吗?

    我们的两个高等教育客户使用 Shibboleth 进行 SSO 我对 Shib 的经验为零 并且没有可供测试的实例 最终 我们希望将 Shib SSO 与 Windows Azure MVC Web 角色中的这些客户端集成 所以我的问题是
  • 检测数组 vb.net 2005 上重复数字的最快方法

    我有这个项目 让用户输入从 1 到 50 的 5 个不同的数字 但我想在保存到数据库之前验证它 我将是 5 个唯一的数字 最好和最快的方法是什么 您可以使用哈希集 T 的 检查这个 Dim numbers As IEnumerable Of
  • 如何更改面板滚动条的背景颜色?

    因此 我正在为我的应用程序制作一个深色模式选项 并且我希望滚动条的背景颜色也改变颜色 这样它就不会看起来不合适 我试图寻找解决方案 但到目前为止我只找到了控件中滚动条的代码 但我需要更改面板的滚动条 有人知道该怎么做吗 预先非常感谢 当我开
  • 如何将 SecureString 转换为 System.String?

    关于通过创建 System String 来取消 SecureString 的所有保留意见aside 如何做呢 如何将普通的 System Security SecureString 转换为 System String 我相信许多熟悉 Se
  • Cassandra 与日志记录活动

    我将卡桑德拉与昆德拉一起使用 我的问题很简单 有什么方法可以记录所有查询 请求到 Cassandra 吗 我想知道服务器站点上到底发生了什么 Regards Tom 为 org apache cassandra thrift Cassand
  • 在服务中处理 $http 响应

    我最近发布了我面临的问题的详细描述here在这样 因为我无法发送实际的 http请求时 我使用超时来模拟异步行为 在 Gloopy 的帮助下 从我的模型到视图的数据绑定工作正常 现在 当我使用 http代替 timeout 本地测试 我可以
  • 我的“重复排列”代码中的递归调用是否会累积而堵塞 RAM?

    一些背景知识 我是一名业余程序员 几个月前 在学习了一段时间的 Mathematica 编程 我的第一语言 之后 我利用业余时间学习了 Haskell 我目前正在阅读 Will Kurt 所著的第二本 Haskell 书 但要让自己对 Ha
  • 音频无法在 Android 中播放。 android.content.res.Resources$NotFoundException:资源 ID #0x0

    我正在尝试在 Android 中播放音频文件 但它似乎崩溃并给出了ResourcesNotFoundException 音频文件保存在 res 内的 raw 文件夹中 音频文件的名称由随机生成的数字确定 然后将其连接到 音频 int res
  • 如何关闭 iframe?

    打开 iframe 后 有时需要关闭它 到目前为止 我只是将 iframe 从其父节点中删除 从而将其与 DOM 断开 但是 我发现这并不会立即结束 iframe 的生命 并且它的 javascript 代码仍然可以回调到父窗口 而父窗口不
  • Spring 反应式的 Spring Security 会话超时

    我有一个集成了 Spring Security 的反应式应用程序 它是由 springinitializr 创建的 主要包含 3 个包 spring boot spring security 和 webflux 我试图通过以下配置来配置会话
  • gPRC(protobuf)可以返回空消息吗?

    我们的客户端调用 gRPC 服务器 理想情况下它应该返回 MyMessage 响应对象 但是这个MyMessage对象可以为null吗 或者gRPC不能返回null对象 因为如果它是null grpc会抛出异常 回答你的问题 检查这些谷歌文
  • 内联函数有什么好处?

    在 C 中使用内联函数的优点 缺点是什么 我发现它只会提高编译器输出的代码的性能 但是有了当今优化的编译器 快速的 CPU 巨大的内存等 不像 1980 年 优点 通过在需要的地方内联代码 您的程序将在函数调用和返回部分花费更少的时间 它应
  • Swift 数组中最大值及其索引的高效算法

    我编写了一个 Swift 算法 用于查找 Swift 数组中的最大值及其索引 这是受到 Matlab 和 Octave 中 max m 函数的启发 这里的专家能否提出一种提高该算法速度的方法 我的意思是它是否可以做得更快 或者您认为这对于大