我有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]])
您可以使用np.pad它,它也可以2-D使用指定填充宽度的元组填充数组((top, bottom), (left, right))。为此,您可以定义:
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:
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:
ndarrays
pad_to_length(a, m) array([[0, 1, 2, 0, 0], [3, 4, 5, 0, 0], [6, 7, 8, 0, 0]])