Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带列表的Numpy数组索引:arr[:][li]和arr[:,li]之间的差异_Python_Arrays_Numpy_Indexing - Fatal编程技术网

Python 带列表的Numpy数组索引:arr[:][li]和arr[:,li]之间的差异

Python 带列表的Numpy数组索引:arr[:][li]和arr[:,li]之间的差异,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,以下行为的解释是什么: import numpy as np arr = np.zeros((3, 3)) li = [1,2] print('output1:', arr[:, li].shape) print('output2:', arr[:][li].shape) >>output1: (3, 2) >>output2: (2, 3) 我希望output2等于output1。您得到的是正确的输出 在第一线 print('output1:', arr[:

以下行为的解释是什么:

import numpy as np    
arr = np.zeros((3, 3))
li = [1,2]
print('output1:', arr[:, li].shape)
print('output2:', arr[:][li].shape)

>>output1: (3, 2)
>>output2: (2, 3)

我希望output2等于output1。

您得到的是正确的输出

在第一线

print('output1:', arr[:, li].shape)
您正在打印arr中每个子阵列的第2个和第3个元素,因此得到3个元素,每个元素包含2个值

第二行

print('output2:', arr[:][li].shape)

首先选择整个数组,然后从整个数组中选择第二个和第三个元素,每个元素本身包含3个元素,从而得到2个元素,每个元素包含3个值。

您得到的是正确的输出

在第一线

print('output1:', arr[:, li].shape)
您正在打印arr中每个子阵列的第2个和第3个元素,因此得到3个元素,每个元素包含2个值

第二行

print('output2:', arr[:][li].shape)

首先选择整个数组,然后从整个数组中选择第二个和第三个元素,每个元素本身包含3个元素,从而得到2个元素,每个元素包含3个值。

如果检查此代码,可以看到差异-

import numpy as np    
arr = np.arange(9).reshape(3, 3)
li = [1,2]
print('output1:', arr[:, li])
print('output2:', arr[:][li])
这给-

[[1 2]
 [4 5]
 [7 8]]

当您执行arr[:,[1,2]]时,您所说的是要获取数组的所有行:指定这个,并从中获取列[1,2]

另一方面,在执行arr[:]时,首先引用的是完整数组。您将再次从中取出前两行


本质上,在第二种情况下,[12]指的是原始数组的行轴,而在第一种情况下,它指的是列。

如果检查此代码,可以看到差异-

import numpy as np    
arr = np.arange(9).reshape(3, 3)
li = [1,2]
print('output1:', arr[:, li])
print('output2:', arr[:][li])
这给-

[[1 2]
 [4 5]
 [7 8]]

当您执行arr[:,[1,2]]时,您所说的是要获取数组的所有行:指定这个,并从中获取列[1,2]

另一方面,在执行arr[:]时,首先引用的是完整数组。您将再次从中取出前两行


本质上,在第二种情况下,[12]指的是原始数组的行轴,而在第一种情况下,它指的是列。

让我们使用一个不同的数组,更容易看到差异:

>>> arr = np.arange(9).reshape(3, 3)
>>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
第一种情况下,arr[:,li]将从第一个维度中选择所有元素(本例中为所有行),然后使用[1,2]对数组进行索引,这意味着只需省略第一列:

数组[[1,2], [4, 5], [7, 8]] 因此,它的形状是3,2


另一种情况arr[:]将复制原始数组,因此它不会更改形状,因此它与arr[li]相等,因此输出形状为2,3。通常,您应该避免对数组进行双重索引,因为这样可能会创建两次视图,这是低效的。

让我们使用一个不同的数组,以便更容易看到差异:

>>> arr = np.arange(9).reshape(3, 3)
>>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
第一种情况下,arr[:,li]将从第一个维度中选择所有元素(本例中为所有行),然后使用[1,2]对数组进行索引,这意味着只需省略第一列:

数组[[1,2], [4, 5], [7, 8]] 因此,它的形状是3,2


另一种情况arr[:]将复制原始数组,因此它不会更改形状,因此它与arr[li]相等,因此输出形状为2,3。通常,您应该避免对数组进行双重索引,因为这样可能会创建两次视图,这是低效的。

a[:]只复制a.a[:]只复制a。