使用两个一维数组创建一个二维数组

77

我的函数(名称为CovexHull(point))将参数作为二维数组接受:

hull = ConvexHull(points)

会话

In [1]: points.ndim
Out[1]: 2
In [2]: points.shape
Out[2]: (10, 2)
In [3]: points
Out[3]:
array([[ 0. ,  0. ],
       [ 1. ,  0.8],
       [ 0.9,  0.8],
       [ 0.9,  0.7],
       [ 0.9,  0.6],
       [ 0.8,  0.5],
       [ 0.8,  0.5],
       [ 0.7,  0.5],
       [ 0.1,  0. ],
       [ 0. ,  0. ]])

points是一个具有2个ndim的NumPy数组。

我有两个不同的NumPy数组(tp和fp),如下所示:

In [4]: fp.ndim
Out[4]: 1
In [5]: fp.shape
Out[5]: (10,)
In [6]: fp
Out[6]:
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.4,
        0.5, 0.6,  0.9,  1. ])

我该如何有效地创建一个二维NumPy数组(例如上面提到的points),其中包括tpfp

3个回答

105
如果您希望将两个由10个元素组成的一维数组合并成一个二维数组,np.vstack((tp, fp)).T可以实现此目的。 np.vstack((tp, fp))将返回一个形状为(2, 10)的数组,而T属性将返回转置后的数组,其形状为(10, 2) (即两个一维数组形成列而不是行)。
>>> tp = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> tp.ndim
1
>>> tp.shape
(10,)

>>> fp = np.array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> fp.ndim
1
>>> fp.shape
(10,)

>>> combined = np.vstack((tp, fp)).T
>>> combined
array([[ 0, 10],
       [ 1, 11],
       [ 2, 12],
       [ 3, 13],
       [ 4, 14],
       [ 5, 15],
       [ 6, 16],
       [ 7, 17],
       [ 8, 18],
       [ 9, 19]])

>>> combined.ndim
2
>>> combined.shape
(10, 2)

32
+1,但使用np.column_stack可以直接获得正确的形状。 - Jaime
2
这不应该是被接受的答案。column_stack更加直观(参见Aminu的答案)。 - Daniel C Jacobs

51
你可以使用NumPy的 column_stack
np.column_stack((tp, fp))

1
这个方法很管用,被接受的答案不够透明。 - eric
1
这是正确的方法。我很惊讶,为什么谷歌搜索时它不是第一个出现的答案。 - Leonard

9

另一种方法是使用 np.transpose。它似乎偶尔被使用,但不易读懂,因此最好使用 Aminu Kano的答案

import numpy as np

tp = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
fp = np.array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
combined = np.transpose((tp, fp))
combined
# Out[3]:
# array([[ 0, 10],
#        [ 1, 11],
#        [ 2, 12],
#        [ 3, 13],
#        [ 4, 14],
#        [ 5, 15],
#        [ 6, 16],
#        [ 7, 17],
#        [ 8, 18],
#        [ 9, 19]])
combined.ndim
# Out[4]: 2
combined.shape
# Out[5]: (10, 2)

1
即使这比被接受的答案更好。vstack 对 OP 的目标没有用处。 - Daniel C Jacobs
2
我认为像 https://dev59.com/O2Mm5IYBdhLWcg3wT9qU#55770994 中的 column_stack 更好,它做了人们所期望的事情,而 vstack 给出了错误的形状。 - NelsonGon
1
感谢您的评论。我已更改答案的文本。 - Keiku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接