我有一个这种形式的numpy数组
[[-0.77947021 0.83822138]
[ 0.15563491 0.89537743]
[-0.0599077 -0.71777995]
[ 0.20759636 0.75893338]]
我想创建此格式为[x1, x2, x1*x2]
的numpy数组,其中[x1, x2]
来自原始数组列表。
目前我正在使用python代码创建列表列表,然后将其转换为numpy数组。但我认为可能有更好的方法来做到这一点。
答案 0 :(得分:5)
像这样:
In [22]: import numpy as np
In [23]: x = np.array([[-0.77947021, 0.83822138],
...: [ 0.15563491, 0.89537743],
...: [-0.0599077, -0.71777995],
...: [ 0.20759636, 0.75893338]])
In [24]: np.c_[x, x[:,0] * x[:,1]]
Out[24]:
array([[-0.77947021, 0.83822138, -0.6533686 ],
[ 0.15563491, 0.89537743, 0.13935199],
[-0.0599077 , -0.71777995, 0.04300055],
[ 0.20759636, 0.75893338, 0.15755181]])
这使用numpy.c_
,这是一个方便的功能,可以沿着它们的第二维连接各种数组。
您可以在Numpy's tutorial中找到有关连接数组的更多信息。 hstack
(请参阅Jaime的答案),vstack
,concatenate
,row_stack
和column_stack
等函数可能是您应该使用的“官方”函数。函数r_
和c_
对模拟Matlab的一些功能有点骇人。它们有点难看,但允许你写得更紧凑。
答案 1 :(得分:1)
有一百万种不同的方式,我可能会这样做:
>>> x = np.random.rand(5, 2)
>>> np.hstack((x, np.prod(x, axis=1, keepdims=True)))
array([[ 0.39614232, 0.14416164, 0.05710853],
[ 0.75068436, 0.61687739, 0.46308021],
[ 0.90181541, 0.20365294, 0.18365736],
[ 0.08172452, 0.36334486, 0.02969418],
[ 0.61455203, 0.80694432, 0.49590927]])