文章目录
- 1. 描述维度的属性--shape
- 1.1 改变原始数组的维度
- 1.2 视图变维
- 1.3 复制变维
- 2. 数组的索引操作--index
- 2.1 一维数组的索引切片
- 2.2 多维数组的切片
- 2.2.1 二维数组的切片
- 2.2.2 三维数组的切片
- 3. ndarray 掩码
- 3.1 布尔掩码
- 3.2 索引掩码
- 4. ndarray 的属性
1. 描述维度的属性–shape 1.1 改变原始数组的维度
改变原始数组的维度是直接对原数组进行修改。
import numpy as np
arr = np.arange(1, 13)
print(arr)
print('-'*20)
# 将数组改为二维数组, 四行三列
arr.shape = (4, 3)
print(arr)
print('-'*20)
# 将数组改为二维数组, 三行四列
arr.resize(3, 4)
print(arr)
print('-'*20)
# 将数组改为三维数组, 两页 每页两行三列
arr.resize(2, 2, 3)
print(arr)
print('-'*20)
# 将数组改为一维数组
arr.resize(arr.size)
print(arr)
1.2 视图变维
视图变维不会对原始数组进行修改,会返回一个新的 ndarray 数组,且新的 ndarray 数组与原始的 ndarray 数组共享数据源,即两个数组使用的数据元素是同一个。
import numpy as np
arr = np.arange(1, 13)
print(arr)
print('-'*20)
# 将数组改为二维数组, 四行三列
arr1 = arr.reshape(4, 3)
print(arr1)
print('-'*20)
# 将数组改为三维数组, 两页 每页两行三列
arr1 = arr.reshape(2, 2, 3)
print(arr1)
print('-'*20)
# 修改原始数组的元素
print(arr)
arr[0] = 100
print(arr)
print(arr1)
import numpy as np
arr = np.arange(1, 13)
arr.resize(4, 3)
print(arr)
print('-'*20)
# 将数组变成一维数组
# 后面的行拼接在前面行的末尾
arr1 = arr.ravel()
print(arr1)
print('-'*20)
arr[0][0] = 1000
print(arr)
print(arr1)
1.3 复制变维
复制变维不会对原始数组进行修改,会返回一个新的 ndarray 数组,且新的 ndarray 数组与原始的 ndarray 数组的数据源相互独立,即两个数组使用的数据元素是不同的。
复制变维会完全复制出来一份新的数组,数据元素与原数组相同,只是新数组的维度不同。
import numpy as np
arr = np.arange(1, 13)
arr.resize(4, 3)
print(arr)
print('-'*20)
# 复制出来的数组为一维数组
arr1 = arr.flatten()
print(arr1)
print('-'*20)
# 修改原始数组
arr[0][0] = 999
print(arr)
print(arr1)
2. 数组的索引操作–index 2.1 一维数组的索引切片
import numpy as np
arr = np.arange(1, 13)
print(arr)
print('='*30)
# 列表支持的切片操作 ndarray 都支持
print(arr[:3])
print(arr[3:])
print(arr[3:6])
print(arr[::2])
print(arr[::-1])
2.2 多维数组的切片 2.2.1 二维数组的切片
import numpy as np
arr = np.arange(1, 13)
arr.resize(4, 3)
print(arr)
print('='*30)
# 获取后两列的全部元素
# [行的切片, 列的切片]
print(arr[2:, :])
print('='*30)
# 获取前两行的 1 3 列元素
print(arr[:2, ::2])
print('='*30)
# 获取中间两行的前两列元素,
print(arr[1:3, 0:2])
2.2.2 三维数组的切片
import numpy as np
arr = np.arange(1, 13)
arr.resize(2, 2, 3)
print(arr)
print('='*30)
# [页的切片, 行的切片, 列的切片]
# 第二页第一行全部元素
print(arr[1:2, 0:1, :])
print('='*30)
# 每页第一行的 1 3 列元素
print(arr[:, 0:1, ::2])
print('='*30)
# 第二页每行的前两列元素,
print(arr[1:, :, :2])
3. ndarray 掩码
掩码是 numpy 提供的一种高效的过滤数组元素,获取原始数组子集的一种数组处理方法。
3.1 布尔掩码一个与数据数组同维度的由布尔值组成的布尔数组,从原数组中选出在对应的布尔数组为 True 的元素。
import numpy as np
arr = np.arange(1, 5)
print(arr)
print('='*30)
mask = [True, False, True, False]
print(arr[mask])
import numpy as np
arr = np.arange(1, 101)
print(arr)
print('=' * 30)
# 从数组中选出奇数元素
# arr 中每个元素先与 2 进行运算,奇数对应的位置为 True,生成一个布尔数组
# 从原数组中选出对应位置为 True 的元素
print(arr[arr % 2 != 0])
3.2 索引掩码
有一个索引数组,索引数组中存放的为原数组各个元素对应的索引值,根据索引数组中的索引值取出对应的元素。
可以用于数组元素的排序
import numpy as np
arr = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
print(arr)
print('='*20)
index = np.arange(0,6,2)
print(index)
print(arr[index])
print('='*20)
index = [4,5,2,1,0,3]
print(index)
print(arr[index])
4. ndarray 的属性
| 属性 | 说明 |
|---|---|
| shape | 各个维度的元素数量 |
| dtype | 元素类型 |
| size | 元素数量 |
| ndim | 维数 |
| itemsize | 元素字节数 |
| nbytes | 总字节数 |
| real | 复数数组的实部数组 |
| imag | 复数数组的虚部数组 |
| T | 数组对象的转置视图 |
| flat | 扁平迭代器 |
import numpy as np
arr = np.array([
[1+1j, 2+4j, 3+7j],
[4+2j, 5+5j, 6+8j],
[7+3j, 8+6j, 9+9j]
])
print(arr)
print('='*20)
print(arr.shape)
print(arr.dtype)
print(arr.size)
print(arr.ndim)
print(arr.itemsize)
print(arr.nbytes)
print(arr.real)
print(arr.imag)
print(arr.T)
a = [x for x in arr.flat]
print(a)



