"column stack"任意数量的一维数组的最 NumPythonic 方法



我想将任意数量的1-d数组和"列堆栈"作为列向量。当我有一个以上这样的数组的列表时,使用column_stack就足够了,但当我有单个这样的数组时,column_stack没有效果。

我可以使用

np.array(np.matrix(j).T)

但这似乎不是最清晰的方式。

如何使用与我用来堆叠此类列表列表的代码相同的代码对单个列表(如[1, 2, 3, 4])进行列堆栈?

它对我有效:

In [629]: np.column_stack([[1,2,3]])
Out[629]: 
array([[1],
       [2],
       [3]])

你在做这件事吗?

In [631]: np.column_stack([1,2,3])
Out[631]: array([[1, 2, 3]])

这是一个标量的列堆栈,实际上是0d个数组。

看看它的代码:

arrays = []
for v in tup:
    arr = array(v, copy=False, subok=True)
    if arr.ndim < 2:
        arr = array(arr, copy=False, subok=True, ndmin=2).T
    arrays.append(arr)
return _nx.concatenate(arrays, 1)

实际上,它通过array传递输入列表的每个元素(将列表转换为数组),然后如果是1d(或0d),则再次通过array传递,确保它是2d(后面是转置)。

有很多方法可以将1d阵列转换为2d列矢量:

np.atleast_2d(np.array([1,2,3])).T
np.array([1,2,3])[:,None]
np.array([1,2,3]).reshape(-1,1)

列表

In [644]: np.atleast_2d([[1,2],[3,4],[4,5]]).T
Out[644]: 
array([[1, 3, 4],
       [2, 4, 5]])

另请查看atleast_2d的代码。

相关内容

最新更新