【发布时间】:2019-07-04 23:24:36
【问题描述】:
我在这里阅读了大多数相关问题,但我似乎无法弄清楚在这种情况下如何使用np.pad。也许它不适用于这个特定的问题。
假设我有一个 Numpy 数组列表。每个数组的长度相同,例如2.列表本身必须被填充为例如5个数组,也可以转换成一个numpy数组。填充的元素应该是用零填充的数组。举个例子
arr = [array([0, 1]), array([1, 0]), array([1, 1])]
expected_output = array([array([0, 1]), array([1, 0]), array([1, 1]), array([0, 0]), array([0, 0])])
以下似乎可行,但我觉得必须有更好,更有效的方法。实际上,这是运行数十万甚至数百万次,因此速度很重要。也许是np.pad?
import numpy as np
def pad_array(l, item_size, pad_size=5):
s = len(l)
if s < pad_size:
zeros = np.zeros(item_size)
for _ in range(pad_size-s):
# not sure if I need a `copy` of zeros here?
l.append(zeros)
return np.array(l)
B = [np.array([0,1]), np.array([1,0]), np.array([1,1])]
AB = pad_array(B, 2)
print(AB)
【问题讨论】:
-
输出不只是一个二维数组吗?
-
@DanielMesejo 是的。 (形状 1xn。)我不知道为什么这很重要,也不知道为什么你删除了你的答案,因为这看起来很好。 (尽管它可以使用更多的解释。)
-
pad_size小于输入列表的长度怎么办?
-
实际上这不可能发生,因为 pad_size 是从输入数据派生的。所以在这种情况下,只需返回 np.array 变体。
-
你使用
item_size参数是为了什么?如果所有数组的大小相同,您可以摆脱它,只使用第一个数组的长度,如zeros = np.zeros(len(l[0]))这里。
标签: python arrays numpy zero-padding