这个问题在这里已有答案:
我有一个Numpy数组数组,主数组中的每个数组都有不同的大小。我需要在每个数组中用0填充结尾,以便主数组内的所有数组长度相等,但我不知道最大长度。我希望它以更干净的方式完成,而不是找到最大长度并在需要时在末尾分配0。下面已经是Numpy aray了
a=[
[1,2,3,4],
[3,56],
[8,4,8,4,9,33,55]
] .
In this case maxlength is 7(the length of third array) .
I want final array to look like follows
a=[
[1,2,3,4,0,0,0],
[3,56,0,0,0,0,0],
[8,4,8,4,9,33,55]
]
对于numpy.pad解决方案,我认为我们需要确保您的输入完全符合您的要求,以便我们能够获得正确的解决方案。然后它将是:
a=[
np.asarray([1,2,3,4]),
np.asarray([3,56]),
np.asarray([8,4,8,4,9,33,55])
]
max_len = max([len(x) for x in a])
output = [np.pad(x, (0, max_len - len(x)), 'constant') for x in a]
print(output)
>>> [
array([1, 2, 3, 4, 0, 0, 0]),
array([ 3, 56, 0, 0, 0, 0, 0]),
array([ 8, 4, 8, 4, 9, 33, 55])
]
又快又脏:
a=[
[1,2,3,4],
[3,56],
[8,4,8,4,9,33,55]
]
n = len(a)
m = max([len(x) for x in a])
A = np.zeros((n,m))
for i in range(n):
A[i,:len(a[i])] = a[i]
print A
正如我在你对@Scott Skiles解决方案的评论中看到的那样,你想使用np.pad,你可以通过以下方式更改for循环中的行:
A[i] = np.pad(a[i],(0,m-len(a[i])),'constant', constant_values=0)