gpt4 book ai didi

python - 在 Swift 和 Pythonkit 中使用 Python 模块

转载 作者:行者123 更新时间:2023-12-05 06:17:39 54 4
gpt4 key购买 nike

我希望得到一些帮助或澄清在 Swift 中使用 PythonKit 的限制。好吧,我说的是 PythonKit,实际上我在 Xcode 中安装了 Tensorflow 工具链,因为我无法让 Pythonkit 作为一个独立的依赖项独立工作(MacBook 会在尝试导入 numpy 的风扇爆破时旋转它的轮子)。

无论如何,我想说的是,我可以在 Swift 中使用 Python 模块,这让我更容易开始将 swift 用于 iOS 应用程序以外的应用程序。

我的问题是我已经很好地导入了 Python 模块,但不清楚它们将具有多少功能。我假设像 numpy 这样的文件几乎是一样的,但作为一名科学家,我经常使用 netcdf 文件,所以一直在尝试使用 netCDF4。这导入很好,我可以很好地加载数据对象和属性等,但我无法取出实际的数组。

这是一个例子:

import PythonKit
PythonLibrary.useVersion(3, 7)

let nc = Python.import("netCDF4")

var Data = nc.Dataset("ncfile path")
var lat_z = Data.variables["lat_z"][:]

[:] 导致 Xcode 发现错误,删除它允许脚本运行,但结果是变量对象而不是数组。我可以在末尾添加内容以获取属性等,例如lat_z.long_name 但不确定如何在不使用 [:] 的情况下提取数组

我希望这只是我需要用 swift 学习的语法差异(在使用它的早期),或者它是 PythonKit 的限制?我还没有发现有人真正使用 netcdf4(示例主要是 numpy 和 Matplotlib)如果是这样,在 swift 中使用 python 模块是否存在一些一般限制?

我也在尝试让 Matplotlib 工作,但我很确定这是因为在 Xcode 中使用了一个命令行工具项目,该项目没有 View ,因此无法显示图像是有道理的。

任何指向最新文档的指针和可能的链接都会很好,似乎已经发生了一些变化,例如导入 PythonKit 而不是导入 Python。

非常感谢

最佳答案

您可以在 python 可迭代对象上使用 count 属性,它等同于 len。您可以通过两种方式索引 Numpy 数组:(i) 使用 Swift 范围语法和 (ii) 使用 Numpy 范围对象:

import Foundation
import PythonKit

let np = Python.import("numpy")
let array = np.array([1, 2, 3, 4, 5])

print(array) // [1, 2, 3, 4, 5]

let subArray = array[0..<array.count]
print(subArray) // [1, 2, 3, 4, 5]

let subArray2 = array[np.arange(0, 2)]
print(subArray2) // [1, 2]

// Swift equivalent of Python ":"
let subArray3 = array[...]

您还可以将 numpy 数组转换为 Swift 数组并使用 Swift 方法和下标:

let swiftArray = Array(array)
let swiftSubArray = swiftArray[0..<3]

print(swiftSubArray) // [1, 2, 3]

请注意,在使用 PythonObject 时,您应该更喜欢使用 Python.len(...) 而不是 count 属性,因为 count 将导致性能损失,因为 PythonKit 的实现不会自动使 Python Object 符合 RandomAccessCollection(因此 count 是 O(n))。

关于python - 在 Swift 和 Pythonkit 中使用 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61505823/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com