为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2021-11-02 17:02:00
我有 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]])
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您可以使用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]])


查看完整回答
反对 回复 2021-11-02
?
莫回无

TA贡献1865条经验 获得超7个赞

我相信对此没有非常有效的解决方案。我认为您需要使用 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的矩阵在哪里。


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号