切片数组returns奇怪的形状

Slicing array returns strange shape

假设我在 Ipython 中执行以下操作:

import numpy as np
test = np.zeros([3,2])
test
test.shape
test[:,0]
test[:,0].shape

结果将是:

array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])
(3,2)
array([ 0.,  0.,  0.])
(3,)

为什么这里最后的结果不是(3,1)?我有一个解决方法:reshape 命令,但这看起来很愚蠢。

我使用不同的数组进行可视化:

>>> import numpy as np
>>> test = np.arange(6).reshape(3, 2)
>>> test
array([[0, 1],
       [2, 3],
       [4, 5]])

像这样切片:

>>> test[:,0]
array([0, 2, 4])

告诉NumPy保留第一个维度但只取第二个维度的第一个元素。根据定义,这会将维数减少 1。

就像:

>>> test[0, 0]
0

会取第一维的第一个元素和第二维的第一个元素。从而将维数减少2.

如果您想将第一列作为实际列(不更改维数),您需要使用切片:

>>> test[:, 0:1]  # remember that the stop is exlusive so this will get the first column only
array([[0],
       [2],
       [4]])

或类似的

>>> test[:, 1:2]  # for the second column
array([[1],
       [3],
       [5]])

>>> test[0:1, :]  # first row
array([[0, 1]])

如果您在给定维度中只有一个坐标但想保留该维度,请将其包装在 arraylist

test[:,[0]].shape
Out: (3, 1)