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

观察代码:

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

这表明数组没有第二维,因此 xx.T 没有区别。

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

最佳答案

虽然您可以使用 [:,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 子类。它采取措施确保大多数操作返回另一个二维矩阵:
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() 的标量。

关于带有空第二维的数组/向量的 Python/numpy 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29688936/

10-12 15:08