如何填充 Swift 数组使其变大?

How can I pad a Swift array to make it bigger?

我正在将一些 Python 代码移植到 Swift,但在调整其中一个数组的大小时遇到​​问题。

我有一个 Swift 大小为 3640 的二维数组,但我希望它的大小为 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?我敢肯定这非常简单,但目前超出了我的技能范围。如果您能提供帮助,我将不胜感激,因为我对此困惑了很长时间。

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

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 - [=11=].count
    if padding > 0 {
        return [Int](repeating: 0, count: padding) + [=11=]
    } 
    return [=11=]
} 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 时执行一些操作,例如,剪切溢出的项目。