python如何用零填充numpy数组

python如何用零填充numpy数组,第1张

python如何用零填充numpy数组

很简单,使用参考形状创建一个包含零的数组:

result = np.zeros(b.shape)# actually you can also use result = np.zeros_like(b) # but that also copies the dtype not only the shape

然后在需要的地方插入数组:

result[:a.shape[0],:a.shape[1]] = a

瞧,您已经填充了它:

print(result)array([[ 1.,  1.,  1.,  1.,  1.,  0.],       [ 1.,  1.,  1.,  1.,  1.,  0.],       [ 1.,  1.,  1.,  1.,  1.,  0.],       [ 0.,  0.,  0.,  0.,  0.,  0.]])

如果您定义应该在左上方插入元素的位置,也可以使其更通用

result = np.zeros_like(b)x_offset = 1  # 0 would be what you wantedy_offset = 1  # 0 in your caseresult[x_offset:a.shape[0]+x_offset,y_offset:a.shape[1]+y_offset] = aresultarray([[ 0.,  0.,  0.,  0.,  0.,  0.],       [ 0.,  1.,  1.,  1.,  1.,  1.],       [ 0.,  1.,  1.,  1.,  1.,  1.],       [ 0.,  1.,  1.,  1.,  1.,  1.]])

但请注意,偏移量不要超过允许的范围。例如

x_offset = 2
,这将失败。


如果您有任意数量的维,则可以定义切片列表以插入原始数组。我发现有趣的是可以玩一下,并创建了一个填充函数,该函数可以填充(偏移)任意形状的数组,只要数组和引用的维数相同且偏移量不太大即可。

def pad(array, reference, offsets):    """    array: Array to be padded    reference: Reference array with the desired shape    offsets: list of offsets (number of elements must be equal to the dimension of the array)    """    # Create an array of zeros with the reference shape    result = np.zeros(reference.shape)    # Create a list of slices from offset to offset + shape in each dimension    insertHere = [slice(offset[dim], offset[dim] + array.shape[dim]) for dim in range(a.ndim)]    # Insert the array in the result at the specified offsets    result[insertHere] = a    return result

和一些测试用例:

import numpy as np# 1 Dimensiona = np.ones(2)b = np.ones(5)offset = [3]pad(a, b, offset)# 3 Dimensionsa = np.ones((3,3,3))b = np.ones((5,4,3))offset = [1,0,0]pad(a, b, offset)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5663719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存