numpy数组的动态零填充

2024-10-05 10:05:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有K个特征向量,它们都共享维数n,但是有一个可变维m(nxm)。他们都生活在一张单子上。在

to_be_padded = []

to_be_padded.append(np.reshape(np.arange(9),(3,3)))

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

to_be_padded.append(np.reshape(np.arange(18),(3,6)))

array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17]])

to_be_padded.append(np.reshape(np.arange(15),(3,5)))

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

我要找的是一个聪明的方法来零垫这些行np.数组它们都有相同的维数m。我试着用np.pad但我还没能想出一个好办法。任何帮助或推动在正确的方向将不胜感激!在

结果应该使数组如下所示:

^{pr2}$

Tags: to方法np数组bearray单子append
2条回答

我认为没有非常有效的解决办法。我认为您需要用for循环遍历列表,并分别处理每个数组:

for i in range(len(to_be_padded)):
    padded = np.zeros((n, maxM))
    padded[:,:to_be_padded[i].shape[1]] = to_be_padded[i]
    to_be_padded[i] = padded

其中maxM是列表中最长的m。在

您可以使用^{}来实现这一点,它还可以使用一组指定填充宽度的值的元组填充2-D数组。为此,您可以定义:

def pad_to_length(x, m):
    return np.pad(x,((0, 0), (0, m - x.shape[1])), mode = 'constant')

用法

您可以从找到列数最多的ndarray开始。假设您有两个ab

^{pr2}$

然后使用此参数填充ndarrays

pad_to_length(a, m)
array([[0, 1, 2, 0, 0],
       [3, 4, 5, 0, 0],
       [6, 7, 8, 0, 0]])

相关问题 更多 >

    热门问题