【问题标题】:How array in array is calculated in numpy?numpy中如何计算数组中的数组?
【发布时间】:2021-08-13 00:59:33
【问题描述】:
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(所以在hit and trial的方法中得到了答案)。

待在家里注意安全!!!!

提前谢谢你。

【问题讨论】:

标签: python arrays python-3.x numpy python-3.8


【解决方案1】:

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)。

【讨论】:

    【解决方案2】:

    这是一个索引数组的例子(如果你是 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]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2022-01-07
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多