【问题标题】:How can I pad a Swift array to make it bigger?如何填充 Swift 数组以使其更大?
【发布时间】:2021-11-30 00:23:04
【问题描述】:

我正在将一些 Python 代码移植到 Swift,但在调整我的数组之一时遇到了问题。

我有一个大小为 3640 的 Swift 二维数组,但我希望它的大小为 6960

我不知道如何做到这一点。我正在寻找的是类似 NumPy 的 pad 功能,但对于 Swift。

以下是我在 Python 中的实现方式:

# Let mfccs be a 2D NumPy array of shape [40,91] and size 3640

max_pad_len = 174

pad_width = max_pad_len - mfccs.shape[1]

# Resize mfccs from size 3640 to size 6960

mfccs = np.pad(mfccs, pad_width=((0, 0), (0, pad_width)), mode='constant')

# Now mfccs has a shape [40, 174] and size 6960

如何将此代码转换为 Swift?我敢肯定这很简单,但目前超出了我的技能范围。非常感谢您的帮助,因为我对此困惑了很长时间。

【问题讨论】:

  • 你肯定尝试过某事。 SO 不是免费的代码编写网站。如果不表现出至少一些(研究)努力,您就不太可能在这里收到答案。
  • 谢谢你,@DávidPásztor。下次我会展示我的作品

标签: arrays swift numpy padding


【解决方案1】:

给定一个二维数组和一个最大填充长度:

let array2d = [[1, 2], [11, 12, 13], [21], [], [41, 42, 43, 44, 45]]
let maxPadLen = 4

您可以像这样填充它(请注意,它是按元素完成的,因为在 Swift 中,二维数组是数组的数组,并且不像在 NumPy 或 Pandas 中那样具有二维形状):

let paddedArray2d = array2d.map {
    let padding = maxPadLen - $0.count
    if padding > 0 {
        return [Int](repeating: 0, count: padding) + $0
    } 
    return $0
} as [[Int]]

如果你打印出初始的array2d 和填充的paddedArray2d,你会得到:

Initial array:
[[1, 2], [11, 12, 13], [21], [], [41, 42, 43, 44, 45]]
Padded array:
[[0, 0, 1, 2], [0, 11, 12, 13], [0, 0, 0, 21], [0, 0, 0, 0], [41, 42, 43, 44, 45]]

注意一个元素怎么可能有比 maxPadLen 更多的元素,如果你不想允许它,你可以在 map 函数中 padding < 0 时做一些事情,例如,剪切溢出的元素。

【讨论】:

  • 这非常有帮助,谢谢@Daniel。我不知道 Swift 与 NumPy 中数组的差异。一个问题:padding 在您的代码示例中代表什么?它在您的第二个代码块的第二行中引用自己,但未定义。是零吗?一个零数组?再次感谢您。
  • @Beowulf 我修复了代码,现在一切都应该清楚了。 padding 只是计算需要多少个 0
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2016-09-14
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多