我倾向于用括号对numpy数组(矩阵)进行索引,但我注意到,当我想对数组(矩阵)进行切片时,我必须使用逗号符号。为什么会这样呢?例如,
>>> x = numpy.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> x[1][1]
4                 # expected behavior
>>> x[1,1]
4                 # expected behavior
>>> x[:][1]
array([3, 4])     # huh?
>>> x[:,1]
array([2, 4, 6])  # expected behavior发布于 2016-06-30 04:34:03
这是:
x[:, 1]意思是“沿第一轴取x的所有指标,但沿第二轴只取索引1”。
这是:
x[:][1]意思是“沿着第一个轴取x的所有索引(所以所有的x),然后沿着结果的第一个轴取索引1”。您正在将1应用到错误的轴上。
x[1][2]和x[1, 2]只是等价的,因为用整数索引数组会将所有剩余的轴移到形状的前面,因此x[1]的第一个轴是x的第二个轴。这一点都不概括;您几乎应该始终使用逗号,而不是多个索引步骤。
发布于 2016-06-30 04:45:16
当对数组的多维数据进行切片时,如果所提供的索引少于轴数,则丢失的索引被视为完整的切片。因此,当您实际上是在调用x[:][1]是x[:,:][1,:]时,x[:,:]只返回x本身。
发布于 2019-11-22 06:42:32
对此的真正解释是在两个括号中,第一个括号(x[] )创建一个临时数组,该数组引用多维数组的第一个维度。
而x的第二个括号将应用于已经创建的临时数组。
所以没有真正的危险发生。由于所描述的行为,当您将切片与多个括号相结合时,第一个基本上是选择numpy数组的一部分,而第二个括号则进入已经选择的数组。
https://stackoverflow.com/questions/38113994
复制相似问题