Python NumPy之索引怎么使用(numpy,python,开发技术)

时间:2024-05-04 10:38:40 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

NumPy 或 Numeric Python 是一个用于计算同质 n 维数组的包。在 numpy 维度中称为轴。

为什么我们需要 NumPy

出现了一个问题,当 python 列表已经存在时,为什么我们需要 NumPy。答案是我们不能直接对两个列表的所有元素执行操作。例如,我们不能直接将两个列表相乘,我们必须逐个元素地进行。这就是 NumPy 发挥作用的地方。

示例 #1:

#演示需要NumPy的Python程序

list1=[1,2,3,4,5,6]
list2=[10,9,8,7,6,5]

将两个列表直接相乘会出错。

print(list1*list2)

输出 :

TypeError: can't multiply sequence by non-int of type 'list'

因为这可以通过 NumPy 数组轻松完成。

示例 #2:

#演示NumPy数组使用的Python程序
importnumpyasnp

list1=[1,2,3,4,5,6]
list2=[10,9,8,7,6,5]

将list1转换为NumPy数组

a1=np.array(list1)

将list2转换为NumPy数组

a2=np.array(list2)

print(a1*a2)

输出 :

array([10, 18, 24, 28, 30, 30])

python的numpy包具有以不同方式索引的强大功能。

使用索引数组进行索引

索引可以通过使用数组作为索引在 numpy 中完成。在切片的情况下,返回数组的视图或浅表副本,但在索引数组中返回原始数组的副本。Numpy 数组可以用其他数组或任何其他序列索引,但元组除外。最后一个元素由 -1 索引,第二个由 -2 索引,依此类推。

示例 #1:

#演示索引数组使用的Python程序。
importnumpyasnp

创建一个从10到1的整数序列,步长为-2

a=np.arange(10,1,-2)
print("\nAsequentialarraywithanegativestep:\n",a)

索引在np.array方法中指定。

newarr=a[np.array([3,1,2])]
print("\nElementsattheseindicesare:\n",newarr)

输出 :

A sequential array with a negative step:
[10 8 6 4 2]

Elements at these indices are:
[4 8 6]

示例 #2:

importnumpyasnp

元素从1到9的NumPy数组

x=np.array([1,2,3,4,5,6,7,8,9])

索引值可以是负数。

arr=x[np.array([1,3,-3])]
print("\nElementsare:\n",arr)

输出 :

Elements are:
[2 4 7]

索引类型

有两种类型的索引:

基本切片和索引

考虑语法 x[obj],其中 x 是数组,obj 是索引。切片对象是基本切片情况下的索引。当 obj 为 时发生基本切片:

  • 形式为 start : stop : step 的切片对象

  • 一个整数

  • 或切片对象和整数的元组

基本切片生成的所有数组始终是原始数组的视图。

代码#1:

#用于基本切片的Python程序。
importnumpyasnp

从0到19排列元素

a=np.arange(20)
print("\nArrayis:\n",a)

a[start:stop:step]

print("\na[-8:17:1]=",a[-8:17:1])

:运算符表示直到最后的所有元素。

print("\na[10:]=",a[10:])

输出 :

Array is:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]

a[-8:17:1] = [12 13 14 15 16]

a[10:] = [10 11 12 13 14 15 16 17 18 19]

代码#2:

#用于基本切片和索引的Python程序
importnumpyasnp

A3-Dimensionalarray

a=np.array([[0,1,2,3,4,5]
[6,7,8,9,10,11]
[12,13,14,15,16,17]
[18,19,20,21,22,23]
[24,25,26,27,28,29]
[30,31,32,33,34,35]]
print("\nArrayis:\n",a)

切片和索引

print("\na[0,3:5]=",a[0,3:5])

print("\na[4:,4:]=",a[4:,4:])

print("\na[:,2]=",a[:,2])

print("\na[2:;2,::2]=",a[2:;2,::2])

输出 :

Array is:
[[0 1 2 3 4 5]
[6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]
[30 31 32 33 34 35]]

a[0, 3:5] = [3 4]

a[4:, 4:] = [[28 29],
[34 35]]

a[:, 2] = [2 8 14 20 26 32]

a[2:;2, ::2] = [[12 14 16],
[24 26 28]]

下图让概念更清晰:

Python NumPy之索引怎么使用

省略号也可以与基本切片一起使用。省略号 (...) 是 : 对象的数量,需要创建一个长度与数组维度相同的选择元组。

#使用带省略号的基本切片进行索引的Python程序
importnumpyasnp

A3dimensionalarray.

b=np.array([[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]]])

print(b[...,1])#Equivalenttob[:,:,1]

输出 :

[[ 2 5]
[ 8 11]]

高级索引

当 obj 为 - 时触发高级索引

  • 整数或布尔类型的 ndarray

  • 或具有至少一个序列对象的元组

  • 是一个非元组序列对象

高级索引返回数据的副本而不是它的视图。高级索引有整数和布尔两种类型。

纯整数索引: 当整数用于索引时。第一维的每个元素都与第二维的元素配对。所以本例中元素的索引为 (0,0),(1,0),(2,1) 并选择相应的元素。

#显示高级索引的Python程序
importnumpyasnp

a=np.array([[1,2],[3,4],[5,6]])
print(a[[0,1,2],[0,0,1]])

输出 :

[1 3 6]

结合高级索引和基本索引

当索引中至少有一个切片 (:)、省略号 (...) 或 newaxis 时(或者数组的维度多于高级索引),则行为可能会更复杂。这就像连接每个高级索引元素的索引结果

在最简单的情况下,只有一个高级索引。例如,单个高级索引可以替换切片,结果数组将是相同的,但是,它是一个副本并且可能具有不同的内存布局。如果可能,切片是优选的。

#显示高级和基本索引的Python程序
importnumpyasnp

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

print(a[1:2,1:3])
print(a[1:2,[1,2]])

输出 :

[4, 5]
[4, 5]

了解情况的最简单方法可能是根据结果形状进行思考。索引操作有两个部分,由基本索引(不包括整数)定义的子空间和来自高级索引部分的子空间。需要区分两种索引组合的情况:

高级索引由切片、省略号或 newaxis 分隔。例如x[arr1, :, arr2].

高级索引都彼此相邻。例如x[..., arr1, arr2, :],但不是x[arr1, :, 1]因为 1 在这方面是一个高级索引。

在第一种情况下,高级索引操作产生的维度首先出现在结果数组中,然后是子空间维度。在第二种情况下,来自高级索引操作的维度被插入到结果数组中与它们在初始数组中相同的位置(后一种逻辑使简单的高级索引的行为就像切片一样)。

布尔数组索引

这个索引有一些布尔表达式作为索引。返回满足该布尔表达式的那些元素。它用于过滤所需的元素值。

代码 #1

#您可能希望选择大于50的数字
importnumpyasnp

a=np.array([10,40,80,50,100])
print(a[a>50])

输出 :

[80 100]

代码 #2

#您可能希望将40的倍数平方
importnumpyasnp

a=np.array([10,40,80,50,100])
print(a[a%40==0]**2)

输出 :

[1600 6400])

代码 #3

#您可能希望选择行之和是10的倍数的那些元素。
importnumpyasnp

b=np.array([[5,5],[4,5],[16,4]])
sumrow=b.sum(-1)
print(b[sumrow%10==0])

输出 :

array([[ 5, 5], [16, 4]])

本文:Python NumPy之索引怎么使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么用js实现签到日历下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18