转换一个numpy数组

时间:2013-11-07 17:47:20

标签: python numpy

我有一个这种形式的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数组。但我认为可能有更好的方法来做到这一点。

2 个答案:

答案 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的答案),vstackconcatenaterow_stackcolumn_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]])