python:在Numpy数组中的每个数组的末尾填充零[duplicate]

问题描述 投票:0回答:2

我有一个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]
  ]
python arrays numpy
2个回答
0
投票

对于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])
    ]

0
投票

又快又脏:

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)
© www.soinside.com 2019 - 2024. All rights reserved.