Python 教程之 Numpy(7)—— 基本切片和高级索引

简介: Python 教程之 Numpy(7)—— 基本切片和高级索引

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

为什么我们需要 NumPy ?

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

# 演示需要 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 数组轻松完成。

另一个例子,

# 演示 NumPy 数组使用的 Python 程序
import numpy as np
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])

本文将帮助您详细了解 NumPy 中的索引。python的numpy包具有以不同方式索引的强大功能。

使用索引数组进行索引

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

# 演示索引数组使用的 Python 程序
import numpy as np
# 创建一个从 10 到 1 的整数序列,步长为 -2
a = np.arrange(10, 1, -2)
print("\n A sequential array with a negative step: \n",a)
# 索引在 np.array 方法中指定
newarr = a[np.array([3, 1, 2 ])]
print("\n Elements at these indices are:\n",newarr)

输出 :

A sequential array with a negative step:
[10  8  6  4  2]
Elements at these indices are:
[4 8 6]

另一个例子,

import numpy as np
# 元素从 1 到 9 的 NumPy 数组
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 索引值可以是负数
arr = x[np.array([1, 3, -3])]
print("\n Elements are : \n",arr)

输出 :

Elements are:
[2 4 7]

索引类型

有两种类型的索引:

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

  1. 形式为 start : stop : step 的切片对象
  2. 一个整数
  3. 或切片对象和整数的元组

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

# 用于基本切片的 Python 程序
import numpy as np
# 从 0 到 19 排列元素
a = np.arrange(20)
print("\n Array is:\n ",a)
# a[start:stop:step]
print("\n a[-8:17:1] = ",a[-8:17:1])
# : 运算符表示直到最后的所有元素。
print("\n a[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] 

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

# 使用带省略号的基本切片进行索引的 Python 程序
import numpy as np
# A 3 dimensional array.
b = np.array([[[1, 2, 3],[4, 5, 6]],
      [[7, 8, 9],[10, 11, 12]]])
print(b[...,1]) #Equivalent to b[: ,: ,1 ]

输出 :

[[ 2 5] 
 [ 8 11]]

2. 高级索引: 当 obj 为 时触发高级索引:

  • 整数或布尔类型的 ndarray
  • 或具有至少一个序列对象的元组
  • 是一个非元组序列对象

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

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

# 显示高级索引的 Python 程序
import numpy as np
a = np.array([[1 ,2 ],[3 ,4 ],[5 ,6 ]])
print(a[[0 ,1 ,2 ],[0 ,0 ,1]])

输出 :

[1 3 6]

布尔索引

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

# 你可能希望选择大于 50 的数字
import numpy as np
a = np.array([10, 40, 80, 50, 100])
print(a[a>50])

输出 :

[80 100]
# 您可能希望将 40 的倍数平方
import numpy as np
a = np.array([10, 40, 80, 50, 100])
print(a[a%40==0]**2)

输出 :

[1600 6400])
# 您可能希望选择行之和是 10 的倍数的那些元素。
import numpy as np
b = np.array([[5, 5],[4, 5],[16, 4]])
sumrow = b.sum(-1)
print(b[sumrow%10==0])

输出 :

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

感谢大家的阅读,有什么问题的话可以在评论中告诉我。希望大家能够给我来个点赞+收藏+评论 ,你的支持是海海更新的动力!后面我会持续分享前端 & 后端相关的专业知识。



目录
相关文章
|
2天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
23 8
|
2天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
20 7
|
2天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
19 4
|
2天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
17 5
|
索引 Python
Python 花式索引
class Test(object): def __getitem__(self, index): print index t = Test() t[0] t[0, 1] t[0, 1, .
1086 0
|
11天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
10天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
17天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
129 59
|
10天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
34 10