假设我有np array
这样[366, 731, 48813, 151, 5607, 45568, 24681, 1642, 48814]
(我知道它的列表,例如)
如何将其转换为某个最大大小的np array
,其中后面的位只是零?
事情是我有这样的列表,我想使用np.append()
[366, 731, 48813, 151, 5607, 45568, 24681, 1642, 48814]
[]
[2325, 148, 211, 37, 24203, 12, 7332, 1415, 196, 141, 41, 4598, 29, 4147, 2231, 8954, 8938, 44, 27993, 5714, 10282, 7858, 785, 21925, 26456, 22217, 5212, 4017]
[]
[8932, 48815, 1415, 3430, 29, 180, 37, 4425, 2983, 639, 25, 633, 9167, 6154, 29, 1720, 577, 34017, 48816]
[]
您可以看到的具有不同的大小,并忽略空列表
答案 0 :(得分:0)
这是numpy
避免append
的一种有效方法:
def sizer(arr, n):
out = np.zeros(n)
out[:len(arr)] = arr
return out
A = [366, 731, 48813, 151, 5607, 45568, 24681, 1642, 48814]
sizer(np.array(A), 14)
# array([ 366., 731., 48813., 151., 5607., 45568., 24681.,
# 1642., 48814., 0., 0., 0., 0., 0.])
将多个数组堆叠到一个数组中:
A = [366, 731, 48813, 151, 5607, 45568, 24681, 1642, 48814]
B = [23, 452, 53, 23412, 3124, 1234]
C = [452, 4654, 5476, 547654, 7654, 567, 324, 5436]
D = []
lst = [A, B, C, D]
np.vstack(sizer(np.array(i), max(map(len, lst))) for i in lst if i)
<强>解释强>
lst
构建可迭代的数组。max(map(len, lst))
计算lst
。sizer()
将每个数组的大小调整为此最大大小。np.vstack
将一个iterable垂直堆叠到numpy
数组中。if i
确保您只包含非空列表。<强>结果强>
array([[ 3.66000000e+02, 7.31000000e+02, 4.88130000e+04,
1.51000000e+02, 5.60700000e+03, 4.55680000e+04,
2.46810000e+04, 1.64200000e+03, 4.88140000e+04],
[ 2.30000000e+01, 4.52000000e+02, 5.30000000e+01,
2.34120000e+04, 3.12400000e+03, 1.23400000e+03,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 4.52000000e+02, 4.65400000e+03, 5.47600000e+03,
5.47654000e+05, 7.65400000e+03, 5.67000000e+02,
3.24000000e+02, 5.43600000e+03, 0.00000000e+00]])