我尝试将numPy数组拆分成大致相等的部分,并将它们合并为一个额外的值,但最终会混淆我是如何做到这一点的。我有一个列表:[0。,2.25,4.4,4,4,4,4,4,4,2.5],它们在np.array_split之后与一个额外的列连接应该会结束喜欢:[0。 ,2.25,4.,8.,4.,4.,4.,8.,4.,4.,8.,4.,2.25]
我采取的步骤:
>>> import numpy as np
>>> list = [0., 2.25, 4., 4., 4., 4., 4., 4., 4., 2.25]
>>> x = np.array(list)
>>> print(x)
[0. 2.25 4. 4. 4. 4. 4. 4. 4. 2.25]
>>> x = np.array_split(list, 4)
>>> print(x)
[array([0. , 2.25, 4. ]), array([4., 4., 4.]), array([4., 4.]),
array([4. , 2.25])]
>>> x = np.concatenate([x, 8])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: all the input arrays must have same number of dimensions
当我将数组保持为相同的形状时,它会将它添加到列表的末尾
>>> x = np.concatenate([[x, y]])
>>> print(x)
[list([array([0. , 2.25, 4. ]), array([4., 4., 4.]), array([4.,
4.]), array([4. , 2.25])])
list([8])]
我知道这样做可能更容易,如果你知道单个数组的形状,那么你可以添加一个单值为8的额外列,但是array_split没有看到相同的大小上方。
我是否会错过这里的一步,是否有可能实现我想要的目标?
答案 0 :(得分:0)
你能不能只做
np.insert(list, [3,6,8],[8])
array([ 0. , 2.25, 4. , 8. , 4. , 4. , 4. , 8. , 4. ,
4. , 8. , 4. , 2.25, 8. ])
np.array_split生成一个split数组列表。因此,要获得所需的结果,您必须这样做
[np.concatenate((i,[8])) for i in x]
[array([ 0. , 2.25, 4. , 8. ]),
array([ 4., 4., 4., 8.]),
array([ 4., 4., 8.]),
array([ 4. , 2.25, 8. ])]
答案 1 :(得分:0)
In [71]: alist = [0., 2.25, 4., 4., 4., 4., 4., 4., 4., 2.25]
In [72]: x = np.array(alist)
In [73]: xs = np.array_split(x, 4)
In [75]: xs
Out[75]:
[array([0. , 2.25, 4. ]),
array([4., 4., 4.]),
array([4., 4.]),
array([4. , 2.25])]
xs
是不同大小的数组列表; concatenate
可以在他们的1维上加入他们,重新创建x
。
In [76]: np.concatenate(xs)
Out[76]: array([0. , 2.25, 4. , 4. , 4. , 4. , 4. , 4. , 4. , 2.25])
注意当我尝试从xs
创建数组时会发生什么:
In [77]: np.array(xs)
Out[77]:
array([array([0. , 2.25, 4. ]), array([4., 4., 4.]), array([4., 4.]),
array([4. , 2.25])], dtype=object)
结果是一个1d对象dtype数组,包含那些数组。但如果拆分产生相同大小的数组,结果将是2d
In [79]: np.array_split(x,5)
Out[79]:
[array([0. , 2.25]),
array([4., 4.]),
array([4., 4.]),
array([4., 4.]),
array([4. , 2.25])]
In [80]: np.array(np.array_split(x,5))
Out[80]:
array([[0. , 2.25],
[4. , 4. ],
[4. , 4. ],
[4. , 4. ],
[4. , 2.25]])
np.concatenate([xs, 8])
实际上是np.concatenate([np.array(xs), np.array(8)])
,加入带有0d整数数组的1d对象数组。因此尺寸误差。
要生成所需的数组,需要将8添加到所需的数组,然后连接。
In [84]: for i,v in enumerate(xs[:-1]):
...: xs[i] = np.concatenate([v,[8]])
...:
In [85]: xs
Out[85]:
[array([0. , 2.25, 4. , 8. ]),
array([4., 4., 4., 8.]),
array([4., 4., 8.]),
array([4. , 2.25])]
In [86]: np.concatenate(xs)
Out[86]:
array([0. , 2.25, 4. , 8. , 4. , 4. , 4. , 8. , 4. , 4. , 8. ,
4. , 2.25])
或者向所有人添加8,并在连接后删除最后8个。