如何在 numpy 中计算数组中的数组?
How array in array is calculated in numpy?
import numpy as np
arr = np.arange(9, dtype = "float").reshape(3,3)
ind1 = np.array([[1,2],[0,1]])
ind2 = np.array([[0,2],[1,2]])
arr2 = arr[ind1,ind2]
大家好,
希望你平安健康!!!
我是 numpy 的新手,我在了解 numpy 的概念时遇到了上述问题。直到倒数第二行我都明白了,但最后一行我仍然无法理解它是如何发生的?
答案是[[3. 8.]
[1.,5.]]
上面的问题是MCQ(所以用命中和试炼的方法得到答案)。
待在家里注意安全!!!
提前致谢。
这是索引数组的示例(如果您是 numpy 的新手,则不是一个基本概念)。 arr2 等同于:
arr2 = [ [arr[ind1[0,0], ind2[0,0]], arr[ind1[0,1], ind2[0,1]]], [arr[ind1[1,0], ind2[1,0]], arr[ind1[1,1], ind2[1,1]]] ]
print(arr2)
#[[3.0, 8.0], [1.0, 5.0]]
ind
数组是 (2,2) 的事实可能会使索引更难可视化。
In [41]: ind1, ind2
Out[41]:
(array([[1, 2],
[0, 1]]),
array([[0, 2],
[1, 2]]))
让我们弄清楚它们 - 相同的值,但在 1d 中:
In [42]: ind1.ravel(), ind2.ravel()
Out[42]: (array([1, 2, 0, 1]), array([0, 2, 1, 2]))
用那个元组索引 arr
产生相同的值,但是 1d:
In [43]: arr[_]
Out[43]: array([3, 8, 1, 5])
这些值是这样配对的:
In [45]: list(zip(*Out[42]))
Out[45]: [(1, 0), (2, 2), (0, 1), (1, 2)]
In [47]: [arr[ij] for ij in Out[45]]
Out[47]: [3, 8, 1, 5]
将其重塑回 (2,2) 以获得原始索引。
更一般地说,当使用数组进行索引时,它们是 broadcast
相互对立的。这些规则允许我们混合使用标量、一维数组和二维数组。这里虽然 broadcasting
很简单,因为两个数组具有相同的形状 (2,2).
import numpy as np
arr = np.arange(9, dtype = "float").reshape(3,3)
ind1 = np.array([[1,2],[0,1]])
ind2 = np.array([[0,2],[1,2]])
arr2 = arr[ind1,ind2]
大家好,
希望你平安健康!!!
我是 numpy 的新手,我在了解 numpy 的概念时遇到了上述问题。直到倒数第二行我都明白了,但最后一行我仍然无法理解它是如何发生的?
答案是[[3. 8.] [1.,5.]] 上面的问题是MCQ(所以用命中和试炼的方法得到答案)。
待在家里注意安全!!!
提前致谢。
这是索引数组的示例(如果您是 numpy 的新手,则不是一个基本概念)。 arr2 等同于:
arr2 = [ [arr[ind1[0,0], ind2[0,0]], arr[ind1[0,1], ind2[0,1]]], [arr[ind1[1,0], ind2[1,0]], arr[ind1[1,1], ind2[1,1]]] ]
print(arr2)
#[[3.0, 8.0], [1.0, 5.0]]
ind
数组是 (2,2) 的事实可能会使索引更难可视化。
In [41]: ind1, ind2
Out[41]:
(array([[1, 2],
[0, 1]]),
array([[0, 2],
[1, 2]]))
让我们弄清楚它们 - 相同的值,但在 1d 中:
In [42]: ind1.ravel(), ind2.ravel()
Out[42]: (array([1, 2, 0, 1]), array([0, 2, 1, 2]))
用那个元组索引 arr
产生相同的值,但是 1d:
In [43]: arr[_]
Out[43]: array([3, 8, 1, 5])
这些值是这样配对的:
In [45]: list(zip(*Out[42]))
Out[45]: [(1, 0), (2, 2), (0, 1), (1, 2)]
In [47]: [arr[ij] for ij in Out[45]]
Out[47]: [3, 8, 1, 5]
将其重塑回 (2,2) 以获得原始索引。
更一般地说,当使用数组进行索引时,它们是 broadcast
相互对立的。这些规则允许我们混合使用标量、一维数组和二维数组。这里虽然 broadcasting
很简单,因为两个数组具有相同的形状 (2,2).