切片数组返回奇怪的形状

时间:2017-08-31 00:30:08

标签: python python-3.x numpy slice reshape

假设我在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命令,但这看起来很傻。

2 个答案:

答案 0 :(得分:1)

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

>>> 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]])

答案 1 :(得分:1)

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

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