基于其他阵列形状的零焊盘阵列

我有 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.arrays 的行进行零填充的智能方法,以便它们共享相同的维度 m。我试过用 np.pad 解决它,但我还没有想出一个漂亮的解决方案。任何在正确方向上的帮助或推动将不胜感激!


结果应该使数组看起来像这样:


array([[0, 1, 2, 0, 0, 0],

       [3, 4, 5, 0, 0, 0],

       [6, 7, 8, 0, 0, 0]])


array([[ 0,  1,  2,  3,  4,  5],

       [ 6,  7,  8,  9, 10, 11],

       [12, 13, 14, 15, 16, 17]])


array([[ 0,  1,  2,  3,  4, 0],

       [ 5,  6,  7,  8,  9, 0],

       [10, 11, 12, 13, 14, 0]])


狐的传说
浏览 189回答 2
2回答

绝地无双

您可以使用np.pad它,它还可以2-D使用指定填充宽度的值元组来填充数组,((top, bottom), (left, right)). 为此,您可以定义:def pad_to_length(x, m):    return np.pad(x,((0, 0), (0, m - x.shape[1])), mode = 'constant')用法您可以从查找ndarray列数最多的开始。假设你有两个,a并且b:a = np.array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])b = np.array([[ 0,  1,  2,  3,  4],       [ 5,  6,  7,  8,  9],       [10, 11, 12, 13, 14]])m = max(i.shape[1] for i in [a,b])# 5然后使用此参数来填充ndarrays:pad_to_length(a, m)array([[0, 1, 2, 0, 0],       [3, 4, 5, 0, 0],       [6, 7, 8, 0, 0]])

莫回无

我相信对此没有非常有效的解决方案。我认为您需要使用 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的矩阵在哪里。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python