假设我在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
命令,但这看起来很傻。
答案 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)
如果您在给定维度中只有一个坐标但希望保留该维度,请将其包含在array
或list
test[:,[0]].shape
Out: (3, 1)