6

假设我创建了一个二维数组

 m = np.random.normal(0, 1, size=(1000, 2))
 q = np.zeros(shape=(1000,1))
 print m[:,0] -q

当我接受时,m[:,0].shape我得到(1000,)的不是(1000,1)我想要的。如何强制m[:,0]转换为(1000,1)数组?

4

1 回答 1

7

正如您所注意到的,通过特别选择第 0 列,您可以降低维度:

>>> m = np.random.normal(0, 1, size=(5, 2))
>>> m[:,0].shape
(5,)

您有很多选择可以让 5x1 对象退出。您可以使用列表而不是整数进行索引:

>>> m[:, [0]].shape
(5, 1)

您可以要求“所有列,但不包括 1”:

>>> m[:,:1].shape
(5, 1)

或者您可以使用None(or np.newaxis),这是扩展维度的一般技巧:

>>> m[:,0,None].shape
(5, 1)
>>> m[:,0][:,None].shape
(5, 1)
>>> m[:,0, None, None].shape
(5, 1, 1)

最后,您可以重塑:

>>> m[:,0].reshape(5,1).shape
(5, 1)

但对于这种情况,我会使用其他方法之一。

于 2013-03-27T20:18:44.403 回答