是否有一个Numpy焊盘等效物,可用于指定所需的尺寸?
是否有一个Numpy焊盘等效物,可用于指定所需的尺寸?,numpy,Numpy,numpy.pad希望我指定填充量,但如果我只想在每个维度中指定所需的总大小,然后对称填充数组以实现该目标,该怎么办 我不是在找人为我写函数。相反,我想知道是否有什么东西是现成的 下面是numpy.pad如何工作的示例: >>> arr = np.ones(shape=(4,4)) >>> arr array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.],
numpy.pad
希望我指定填充量,但如果我只想在每个维度中指定所需的总大小,然后对称填充数组以实现该目标,该怎么办
我不是在找人为我写函数。相反,我想知道是否有什么东西是现成的
下面是numpy.pad
如何工作的示例:
>>> arr = np.ones(shape=(4,4))
>>> arr
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
>>> arr = np.pad(arr, [(1,1),(1,1)])
>>> arr
array([[0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0.]])
>>>
现在我希望我有什么
>>> arr = np.ones(shape=(4,4))
>>> arr
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
>>> arr = np.magic_pad(arr, (6,6))
>>> arr
array([[0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0.]])
>>>
没有内置的功能来实现精确的功能。但总有其他选择。这里有一个数组赋值-
def pad_to_shape(arr, out_shape):
m,n = out_shape
x,y = arr.shape
out = np.zeros(out_shape, dtype=arr.dtype)
mx,my = (m-x)//2, (n-y)//2
out[mx:mx+x, my:my+y] = arr
return out
样本运行-
In [76]: arr
Out[76]:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
In [77]: pad_to_shape(arr, (8,6))
Out[77]:
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
In [78]: pad_to_shape(arr, (4,6))
Out[78]:
array([[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.]])
没有内置的功能来实现精确的功能。但总有其他选择。这里有一个数组赋值-
def pad_to_shape(arr, out_shape):
m,n = out_shape
x,y = arr.shape
out = np.zeros(out_shape, dtype=arr.dtype)
mx,my = (m-x)//2, (n-y)//2
out[mx:mx+x, my:my+y] = arr
return out
样本运行-
In [76]: arr
Out[76]:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
In [77]: pad_to_shape(arr, (8,6))
Out[77]:
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
In [78]: pad_to_shape(arr, (4,6))
Out[78]:
array([[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 0.]])
下面是一个可以指定每侧所需填充量的示例:
# Value to pad by (on both sides)
pad_width_left = 5 # Padding on lefthand side
pad_width_right = 3 # Padding on righthand side
# Now pad vector
arr_padded_left = np.pad(arr, pad_width_left)[:-pad_width_left]
arr_padded_right = np.pad(arr_padded_left, pad_width_right)[pad_width_right:]
下面是一个可以指定每侧所需填充量的示例:
# Value to pad by (on both sides)
pad_width_left = 5 # Padding on lefthand side
pad_width_right = 3 # Padding on righthand side
# Now pad vector
arr_padded_left = np.pad(arr, pad_width_left)[:-pad_width_left]
arr_padded_right = np.pad(arr_padded_left, pad_width_right)[pad_width_right:]
为什么?你不能自己计算所需的参数吗。它不应该太难,也不应该花费太多的计算时间。但是,由于您只是用0填充背景,因此可以创建所需的结果数组(
np.zero((n,n)
)然后将源代码复制到一个片段中。它实际上比pad
快。你知道np.pad
是Python代码,不是一个快速编译的“黑盒”吗?是的,我知道。我问的是有什么东西存在。如果它不存在,我可以接受它。@AlexanderSoare发布的解决方案中有一个有效吗?@Divakar它们有效,但确实有效没有回答我的问题。我的问题是是否存在内置函数。虽然我现在很确定答案是否定的,但这正是我所需要的。@AlexanderSoare用那条注释编辑了我的文章。为什么?你不能自己计算所需的参数。这应该不会太难,也不会花费太多的计算时间。但既然你只是在填充,就不需要了背景为0时,可以创建所需的结果数组(np.zero((n,n)
)然后将源代码复制到一个片段中。它实际上比pad
快。你知道np.pad
是Python代码,不是一个快速编译的“黑盒”吗?是的,我知道。我问的是有什么东西存在。如果它不存在,我可以接受它。@AlexanderSoare发布的解决方案中有一个有效吗?@Divakar它们有效,但确实有效“我没有回答我的问题。我的问题是是否存在内置函数。尽管我现在很确定答案是否定的,这正是我所需要的。”AlexanderSoare用这条注释编辑了我的帖子。