给定大小的 Numpy 填充零
Numpy pad zeroes of given size
我在这里阅读了大多数相关问题,但我似乎无法弄清楚如何在这种情况下使用 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)
您可以像这样重写您的函数:
import numpy as np
def pad_array(l, item_size, pad_size=5):
if pad_size < len(l):
return np.array(l)
s = len(l)
res = np.zeros((pad_size, item_size)) # create an array of (item_size, pad_size)
res[:s] = l # set the first rows equal to the elements of l
return res
B = [np.array([0, 1]), np.array([1, 0]), np.array([1, 1])]
AB = pad_array(B, 2)
print(AB)
输出
[[0. 1.]
[1. 0.]
[1. 1.]
[0. 0.]
[0. 0.]]
我们的想法是创建一个零数组,然后用输入列表中的值填充第一行。
您似乎想在轴 0 的末端填充零,用 numpy
来说。所以你需要的是,
output = numpy.pad(arr, ((0,2),(0,0)), 'constant')
诀窍是 pad_width
参数,您需要将其指定为 pad_width=((0,2),(0,0))
以获得预期的输出。这是你告诉 pad()
在轴 0 的开头插入 0 填充,在轴 0 的末端插入 2 填充,在轴 1 的开头插入 0 填充,在轴 1 的末端插入 0。 [ 的格式=12=] 根据 documentation
是 ((before_1, after_1), … (before_N, after_N))
mode='constant'
告诉 pad()
用参数 constant_values
指定的值填充,默认为 0。
我在这里阅读了大多数相关问题,但我似乎无法弄清楚如何在这种情况下使用 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)
您可以像这样重写您的函数:
import numpy as np
def pad_array(l, item_size, pad_size=5):
if pad_size < len(l):
return np.array(l)
s = len(l)
res = np.zeros((pad_size, item_size)) # create an array of (item_size, pad_size)
res[:s] = l # set the first rows equal to the elements of l
return res
B = [np.array([0, 1]), np.array([1, 0]), np.array([1, 1])]
AB = pad_array(B, 2)
print(AB)
输出
[[0. 1.]
[1. 0.]
[1. 1.]
[0. 0.]
[0. 0.]]
我们的想法是创建一个零数组,然后用输入列表中的值填充第一行。
您似乎想在轴 0 的末端填充零,用 numpy
来说。所以你需要的是,
output = numpy.pad(arr, ((0,2),(0,0)), 'constant')
诀窍是 pad_width
参数,您需要将其指定为 pad_width=((0,2),(0,0))
以获得预期的输出。这是你告诉 pad()
在轴 0 的开头插入 0 填充,在轴 0 的末端插入 2 填充,在轴 1 的开头插入 0 填充,在轴 1 的末端插入 0。 [ 的格式=12=] 根据 documentation
((before_1, after_1), … (before_N, after_N))
mode='constant'
告诉 pad()
用参数 constant_values
指定的值填充,默认为 0。