图解Numpy花式索引

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 图解Numpy花式索引

花式索引

切片

import numpy as np
# 切片
a = np.arange(10)
print("a:{}".format(a))
print("a[2:7:2]结果:{}".format(a[2:7:2]))
复制代码

结果:

a:[0 1 2 3 4 5 6 7 8 9]
a[2:7:2]结果:[2 4 6]
复制代码

解析:

1.索引范围是2到7(不包含7)

image.png

2.切片步长是2

image.png

3.最终结果:


image.png


import numpy as np
# 切片
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a[1:3, 0:2]
print("a:{}".format(a))
print("b:{}".format(b))
复制代码

结果:

a:[[1 2 3]
 [4 5 6]
 [7 8 9]]
b:[[4 5]
 [7 8]]
复制代码

解析:

image.png

索引

import numpy as np
# 索引
a = np.arange(10, 20)
print("a:{}".format(a))
print("a[[1, 3, 6, 8]]结果:{}".format(a[[1, 3, 6, 8]]))
复制代码

结果:

a:[10 11 12 13 14 15 16 17 18 19]
a[[1, 3, 6, 8]]结果:[11 13 16 18]
复制代码

解析: 1.逐个索引取数据

image.png

2.最终结果:

image.png

高级索引

import numpy as np
# 高级索引
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 2, 0], [0, 1, 1]]
print("x:{}".format(x))
print("y:{}".format(y))
复制代码

结果:

x:[[1 2]
 [3 4]
 [5 6]]
y:[1 6 2]
复制代码

解析:

1.按照索引值定位子元素

image.png

2.在上一步的基础上进一步定位

image.png

3.最终结果:

image.png

import numpy as np
# 高级索引
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组x:')
print(x)
print('\n')
rows = [[0, 0], [3, 3]]
cols = [[0, 2], [0, 2]]
y = x[rows, cols]
print('这个数组的四个角元素是:')
print(y)
复制代码

结果:

我们的数组x:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
这个数组的四个角元素是:
[[ 0  2]
 [ 9 11]]
复制代码

1.按索引位逐个取值

image.png

2.最终结果:

image.png

广播

import numpy as np
#广播
a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b)
复制代码

结果:

[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]
复制代码

解析:

image.png

广播的规则:

1.让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。

2.输出数组的形状是输入数组形状的各个维度上的最大值。

3.如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。

4.当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

简单理解:

对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

1.数组拥有相同形状。

2.当前维度的值相等。

3.当前维度的值有一个是 1。


相关文章
|
3月前
|
索引 Python
|
3月前
|
机器学习/深度学习 数据可视化 API
Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
46 3
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 切片和索引 7
NumPy 切片和索引用于访问和修改 `ndarray` 对象。类似于 Python 的列表切片, 使用索引 `[0-n]` 和切片 `slice(start, stop, step)` 或简写为 `[start:stop:step]` 来提取元素。单个索引 `[n]` 获取单个元素, `[n:]` 获取从 `n` 开始的所有元素, `[n:m]` 获取 `n` 至 `m-1` 的元素。省略号 `...` 保持选择维度与数组一致, 如 `a[...,1]` 获取所有第二列, `a[1,...]` 获取第二行, `a[...,1:]` 获取所有第二列及之后的元素。
27 4
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 3
NumPy高级索引包括整数数组索引、布尔索引及花式索引,能访问并操作数组中的任意元素。例如,使用整数数组索引可以从多维数组中选取特定位置的元素。对于一个4x3数组`x`,通过定义行索引`rows`和列索引`cols`为`[[0,0],[3,3]]`和`[[0,2],[0,2]]`,可以获取四个角的元素:`x[rows,cols]`,结果为`[[0 2] [9 11]]`。此外,结合切片与索引数组可进一步定制数据选择,如`a[1:3, 1:3]`或`a[...,1:]`等。
28 3
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 6
NumPy高级索引包括 using 整数数组、布尔数组等来 access 数组元素, enabling 复杂的操作和 modifications. **布尔索引** uses 布尔数组 to index 目标数组, filtering 元素 based on 条件.
21 2
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 9
NumPy高级索引包括整数数组索引、布尔索引及花式索引,能实现对数组元素的灵活访问与复杂操作。其中,花式索引通过整数数组指定目标轴的下标来选取元素,不同于切片,它总是返回新数组。例如,对二维数组使用倒序索引数组时,会得到指定行的新数组:[[16 17 18 19], [24 25 26 27], [28 29 30 31], [4 5 6 7]]。
38 1
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 切片和索引 4
NumPy 切片和索引允许访问和修改 `ndarray` 对象的内容。类似于 Python 的列表切片, 可以使用 `start:stop:step` 形式的索引, 其中省略号代表默认值。
23 3
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 10
NumPy的高级索引功能强大,支持整数数组索引、布尔索引等多种方式,能够灵活访问和操作数组中的元素。花式索引通过整数数组选取特定位置的数据,不同于切片,它总是创建新数组。使用`np.ix_`处理多维索引时,可实现笛卡尔积效果,选取特定行与列的组合,如示例中从一个二维数组精确取出指定位置的子矩阵。
37 0
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 切片和索引 1
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
24 0
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 切片和索引 1
`ndarray`可通过索引或切片访问和修改。使用`slice`函数设置`start`, `stop`, `step`参数从原数组中切出新数组。 ```markdown Example: ```plaintext import numpy as np a = np.arange(10) s = slice(2, 7, 2) # Start at index 2, stop before 7, step 2 print(a[s]) # Output: [2 4 6] ```markdown ``` 创建`ndarray`并切片。
23 0