如何从Numpy数组中调用一个元素?

584 阅读6分钟

问题: 给定一个Numpy数组,你将如何从给定的数组中调用一个元素?

例子。 当你从Numpy数组中调用一个元素时,被引用的元素会从一个指定的索引中检索出来。让我们看一下下面的场景,它展示了这个概念。

Given

要掌握从Numpy数组中检索元素的艺术,你必须清楚地了解两个基本概念--
(1) Numpy数组的索引
(2)Numpy数组的切分

在本教程中,我们将深入到众多的例子中去征服上述概念,从而学习如何以实用的方式调用Numpy数组元素。

#NOTE:在我们开始之前,极其重要的是要注意Python中的索引总是从0开始,这意味着第一个元素的索引是0,第二个元素的索引是1,以此类推。

从一维数组中检索元素

要从一个一维数组中访问一个元素,你只需要用方括号中的索引来引用它,即:arr[i] ,其中arr 是给定的数组,i 表示要访问的元素的索引。

例子。

import numpy as np

arr = np.array([10, 20, 30, 40, 50])
# accessing the first array element at index 0
print(arr[0])
# accessing the middle array element at index 2
print(arr[2])
# accessing the last array element at index 0
print(arr[4])
# accessing and adding first and last element
print(arr[0]+arr[4])

输出。

10
30
50
60

上面的例子是对一维数组元素进行索引的经典案例。但是如果我们需要从给定的数组中访问一组连续的元素呢。这就是切分的作用了。

  • 切片允许你访问从一个给定的索引开始直到一个指定的结束索引的元素。
  • 语法。 arr[start:end:step]
    • 如果没有指定start,那么它将被自动认为是0。
    • 如果没有指定end,那么它将被自动视为该维度的数组长度。
    • 如果没有指定step,那么它将被自动视为1。

例1:访问一个给定的一维数组的前三个元素.

import numpy as np

arr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print(arr[0:3])
# or
print(arr[:3])

# OUTPUT: [10 20 30]

例2: 访问一个给定的一维数组的最后三个元素.

import numpy as np

arr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print(arr[7:])
# or
print(arr[7:])

# OUTPUT: [ 80  90 100]

例3:访问一个给定的一维数组中的每一个其他元素.

import numpy as np

arr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print(arr[0:10:2])
# or
print(arr[::2])

# OUTPUT: [10 30 50 70 90]

检索二维数组中的元素

要从一个给定的二维Numpy数组中检索元素,你必须使用语法arr[i,j] ,其中arr 代表给定的数组,i 代表行索引,j 代表列索引。

例子。

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
# accessing the 3rd element of 1st row
print(arr[0, 2])
# accessing the 1st element of the 2nd row
print(arr[1, 0])
# accessing and adding 1st element of 1st row (1) and last element of second row (10)
print(arr[0, 0] + arr[1, 4])

输出。

3
6
11

现在让我们来看看如何对二维数组进行切分,以访问位于索引范围内的连续元素。

例1: 访问第一个内部数组中的前三个元素。

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0, 0:3])
# or
print(arr[0, :3])

# OUTPUT: [1 2 3]

例2: 访问第二个内部数组的最后三个元素。

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[1, 2:])
# or
print(arr[1, 2:])

# OUTPUT: [ 8  9 10]

例3: 从两个内部数组中访问第三个元素.

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, 2])
# or
print(arr[:, 2])
# or
print(arr[0:, 2])
# or
print(arr[:2, 2])

# OUTPUT: [3 8]

例4: 从两个数组中访问中间元素。

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, 1:4])
# or
print(arr[:, 1:4])
# or
print(arr[0:, 1:4])
# or
print(arr[:2, 1:4])

# OUTPUT: 
[[2 3 4]
[7 8 9]]

还有一种方法可以从一个给定的二维数组中选择多个数组元素。考虑到你想从第i行和第j列检索元素,你可以把它们打包成一个元组,指定你要检索的每个元素的索引。

例子。

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[(0, 1), (2, 2)])

# OUTPUT: [3 8]

解释一下。 第一个元组包含行的索引,第二个元组包含列的索引。

从多维数组中检索元素

为了检索多维数组的元素,你可以在方括号符号和逗号分隔的索引值的帮助下访问单个元素的索引,每个轴一个。

作为一个经验法则:逗号分隔的方括号中的第一个元素标识最外侧的轴,第二个元素标识最外侧的第二个轴,以此类推。

例子。 在下面的代码中,我们将从第二维的第二个阵列中访问第三个元素。

import numpy as np

arr = np.array([[[100, 200, 300], [400, 500, 600]], [[700, 800, 900], [1, 2, 3]]])
print(arr[1, 1, 2])

# OUTPUT: 3

图形化的可视化

使用负数索引访问元素

你也可以使用负数索引访问数组中的元素,从最后一个元素开始,然后向左移动。

一维数组的负数索引

例1: 访问一个给定数组的最后一个元素.

import numpy as np

arr = np.array([10, 20, 30, 40, 50])
print(arr[-1])

# OUTPUT: 50

例2: 访问一个给定数组的最后三个元素.

import numpy as np

arr = np.array([10, 20, 30, 40, 50])
print(arr[-3:])

# OUTPUT: [30 40 50]

二维数组的负数索引

例1: 访问两个内部数组的最后一个元素.

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, -1])

# OUTPUT: [ 5 10]

例2: 访问两个数组的最后三个元素.

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, -3:])

输出。

[[ 3  4  5]
 [ 8  9 10]]

结论

恭喜你!你已经成功地掌握了从数组中检索元素的艺术。我们已经看到了许多从一维、二维和其他多维数组中选择元素的例子和演示。我希望本教程对你有所帮助。这里有一个强烈推荐的教程列表,将进一步提高你的Numpy技能。