繁体   English   中英

带有空第二维的数组/向量的Python / numpy问题

[英]Python/numpy issue with array/vector with empty second dimension

我有一个似乎是一个简单的问题。

观察代码:

In : x=np.array([0, 6])
Out: array([0, 6])
In : x.shape
Out: (2L,)

这表明该数组没有第二个维度,因此xxT没有xT

如何使x具有尺寸(2L,1L)? 这个问题的真正动机是我有一个形状y [3L,4L] ,我希望y.sum(1)是一个可以转置的矢量等。

虽然您可以重新[:,np.newaxis]数组,并使用[:,np.newaxis]添加维度,但您应该熟悉最基本的嵌套括号或列表符号。 请注意它与显示器的匹配程度。

In [230]: np.array([[0],[6]])
Out[230]: 
array([[0],
       [6]])
In [231]: _.shape
Out[231]: (2, 1)

np.array也接受一个ndmin参数,虽然它在开始时添加额外的维度( numpy的默认位置。)

In [232]: np.array([0,6],ndmin=2)
Out[232]: array([[0, 6]])
In [233]: _.shape
Out[233]: (1, 2)

制作2d的经典方式 - 重塑:

In [234]: y=np.arange(12).reshape(3,4)
In [235]: y
Out[235]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

sum (和相关函数)有一个keepdims参数。 阅读文档。

In [236]: y.sum(axis=1,keepdims=True)
Out[236]: 
array([[ 6],
       [22],
       [38]])
In [237]: _.shape
Out[237]: (3, 1)

empty 2nd dimension不是术语。 更像是一个不存在的第二维度。

维度可以包含0个术语:

In [238]: np.ones((2,0))
Out[238]: array([], shape=(2, 0), dtype=float64)

如果您更熟悉MATLAB,它至少有2d,您可能会喜欢np.matrix子类。 它需要采取措施确保大多数操作返回另一个2d矩阵:

In [247]: ym=np.matrix(y)
In [248]: ym.sum(axis=1)
Out[248]: 
matrix([[ 6],
        [22],
        [38]])

矩阵sum

np.ndarray.sum(self, axis, dtype, out, keepdims=True)._collapse(axis)

_collapse位允许它返回ym.sum()的标量。

还有另一点要保持尺寸信息:

In [42]: X
Out[42]: 
array([[0, 0],
       [0, 1],
       [1, 0],
       [1, 1]])

In [43]: X[1].shape
Out[43]: (2,)

In [44]: X[1:2].shape
Out[44]: (1, 2)

In [45]: X[1]
Out[45]: array([0, 1])

In [46]: X[1:2]  # this way will keep dimension
Out[46]: array([[0, 1]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM