如果我仅切出 1 列与切出多列,为什么 numpy 的行为会有所不同?

Why is numpy's behavior different if I slice out only 1 column vs. if I slice out multiple columns?

如果我有一个名为 data 的 numpy 数组,例如:

[[  3.6216    8.6661   -2.8073   -0.44699   0.     ]
[  4.5459    8.1674   -2.4586   -1.4621    0.     ]
[  3.866    -2.6383    1.9242    0.10645   0.     ]]

我想获取最后一列,我可以通过以下方式将其切出:

data[:,4]

但是,输出会自动“变平”:

[0. 0. 0]

我的期望是它应该给我这个:

[[0]
 [0]
 [0]]

我知道我可以轻松地重塑它,但我想了解为什么当我 select 一列时 numpy 会自动将其展平。如果我改为 select 多列:

data[:,:4]

我得到了我所期望的:

[[  3.6216    8.6661   -2.8073   -0.44699]
 [  4.5459    8.1674   -2.4586   -1.4621 ]
 [  3.866    -2.6383    1.9242    0.10645]]

为什么仅切出 1 列与切出多列时 numpy 的行为不同?有什么方法可以使 numpy 切出 1 列的行为不展平数组?

当您使用单个数字进行索引时,该维度将被消除。这就是 NumPy 的设计方式。所以这个:

data[:,4]

表示“给我第 4 列,并将维度数减少 1”。而这个:

data[:,4:5]

表示“给我第 4 列,但保持维数不变。”