博客
关于我
Python-numpy(2)数组的操作
阅读量:795 次
发布时间:2023-03-08

本文共 2131 字,大约阅读时间需要 7 分钟。

数组操作指南

修改数组形状

使用 numpy.reshape 修改数组形状,保留数据不变。

a = np.arange(8)b = a.reshape(4, 2, order='C')
  • a 初始形状为 (8,)
  • b 变为 ((4, 2),),按列排列

输出结果:

a = [0 1 2 3 4 5 6 7]b = [[0 1], [2 3], [4 5], [6 7]]

数据迭代与处理

使用 flat 属性遍历数组元素,保持原始数据不变。

a = np.arange(4).reshape(2, 2)
  • 原始数组 a 形状为 (2, 2)

输出结果:

原始数组 a:  [[0 1]   [2 3]]

数组展平与转置

使用 flatten 和 ravel 展平数组,按不同顺序处理。

a = np.arange(8).reshape(2, 4)
  • 原始数组 a 形状为 (2, 4)

输出结果:

原始数组 a:  [[0 1 2 3]   [4 5 6 7]]展平按列顺序 `flatten(order='C')`:  [0 1 2 3 4 5 6 7]展平按行顺序 `flatten(order='F')`:  [0 4 1 5 2 6 3 7]转置数组 `transpose`:  [[0 4],   [1 5],   [2 6],   [3 7]]

找到特定值位置

使用 where 和索引操作快速定位数组元素。

a = np.arange(8).reshape(2, 4)
  • 原始数组 a 形状为 (2, 4)

输出结果:

np.where(a > 6):  (array([1, 1, 1], dtype=int64),   array([1, 2, 3], dtype=int64))a[where(a > 4)]:  [5, 6, 7]

轴滚动与交换

使用 rollaxis 和 swapaxes 调整数组维度。

b = a.reshape(2, 2, 2)c = np.rollaxis(b, 2, 0)d = np.rollaxis(b, 2, 1)
  • b 形状为 (2, 2, 2)
  • c 将轴 2 滚动到轴 0:((2, 2),)
  • d 将轴 2 滚动到轴 1:((2, 2),)

输出结果:

b = [[[0 1], [2 3]],       [[4 5], [6 7]]]c = [[[0 2], [4 6]],       [[1 3], [5 7]]]d = [[[0 2], [1 3]],       [[4 6], [5 7]]]

数组广播与连接

使用 broadcast 和 concatenate 合并数组。

x = np.array([[1], [2], [3]])y = np.array([4, 5, 6])b = np.broadcast(x, y)c = np.empty(b.shape)c.flat = [u + v for (u, v) in b]
  • x 形状 (3,)
  • y 形状 (3,)
  • b 广播结果 (3, 3)
  • c 填充后形状 (3, 3)

输出结果:

c.flat = [5, 6, 7, 6, 7, 8, 7, 8, 9]

数组拼接与分割

使用 stack、hstack、vstack、split 进行数组拼接与分割。

a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])堆叠(`stack`)结果:

沿轴 0 堆叠:

[[[1, 2], [3, 4]],
[[5, 6], [7, 8]]]

沿轴 1 堆叠:

[[[1, 2], [5, 6]],
[[3, 4], [7, 8]]]

## 数组操作扩展使用 `append`、`insert`、`delete` 进行数组操作。  ```pythona = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])延轴 0 插入:[[1, 2], [3, 4], [7, 8, 9]]延轴 1 插入:[[1, 2, 5, 6],   [3, 4, 7, 8]]删除第二列:[[1, 3],   [4, 6]]

去重与重构

使用 unique 去重并重构原始数组。

a = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])u, indices, inverse, counts = np.unique(a, return_index=True, return_inverse=True, return_counts=True)
  • 去重数组 u:[2, 5, 6, 7, 8, 9]
  • 索引数组 indices:[1, 0, 2, 4, 7, 9]
  • 逆向索引数组 inverse:[1, 0, 2, 0, 3, 1, 2, 4, 0, 5]
  • 出现次数数组 counts:[3, 2, 2, 1, 1, 1]

输出结果:

u[inverse] = [5, 2, 6, 2, 7, 5, 6, 8, 2, 9]

转载地址:http://rwlfk.baihongyu.com/

你可能感兴趣的文章
Python基础——多线程之信号量
查看>>
Python基础——_thread多线程
查看>>
Python基础——Thread类与线程对象
查看>>
Python基础——Thread创建管理多线程
查看>>
Python基础——SQLite数据库基本操作
查看>>
Python基础——MySQL数据库基本操作
查看>>
Python基础_列表 list
查看>>
python系列【仅供参考】:python异步库调用gevent和asyncio对比
查看>>
python基础3
查看>>
Python基础08 面向对象的基本概念
查看>>
python系列【仅供参考】:python二进制转10进制
查看>>
Python基础-函数篇
查看>>
python基础---->常用模块
查看>>
Python基础(2):控制结构
查看>>
Python基础 | 关于“循环”那些事
查看>>
python系列【仅供参考】:python之subprocess模块rsync拉取文件
查看>>
python系列【仅供参考】:python 远程rdp
查看>>
python基础
查看>>
Python基本语法与变量类型
查看>>
python基本数据类型(容器)- tuple list dict set
查看>>