(1) np.loadtxt
data = np.loadtxt('data.txt') # 读取文本文件
(2) np.genfromtxt
data = np.genfromtxt('data.csv', delimiter=',') # 支持复杂格式
2.2.3.7 创建方法推荐场景
| 场景 | 推荐方法 | 优点 |
| 快速初始化全0/全1数组 | np.zeros/np.ones | 内存预分配,明确值 |
| 生成数值序列 | np.arange/np.linspace | 灵活控制范围和步长 |
| 创建单位矩阵或对角矩阵 | np.eye/np.diag | 数学运算专用 |
| 高性能预分配内存 | np.empty | 速度最快(需手动初始化) |
| 随机数据生成 | np.random 模块 | 模拟实验数据 |
2.2.4 ndarray的数据类型
| 数据类型 | 类型代码 | 说明 |
| bool | 布尔类型 | |
| int8、uint8int16、uint16int32、uint32int64、uint64 | i1,u1i2,u2i4,u4i8,u8 | 有符号、无符号的8位(1字节)整型有符号、无符号的16位(2字节)整型有符号、无符号的32位(4字节)整型有符号、无符号的64位(8字节)整型 |
| float16float32float64 | f2f4或ff8或d | 半精度浮点型单精度浮点型双精度浮点型 |
| complex64complex128 | c8c16 | 用两个32位浮点数表示的复数用两个64位浮点数表示的复数 |
创建数组时可以使用dtype参数指定元素类型:
arr1 = np.array([1, 2, 3], dtype=np.float64)
# [1. 2. 3.]
arr2 = np.array([0.2, 2.5, 4.8], dtype="i8")
# [0 2 4]
也可以使用ndarray.astype()方法转换数组的元素类型:
arr1 = np.array([1, 2, 3], dtype=np.float64)
# [1. 2. 3.]
arr2 = arr1.astype(np.int64)
# [1 2 3]
数据类型深度解析
# 显式指定数据类型
arr = np.array([1, 2, 3], dtype=np.float32)
# 类型转换
int_arr = arr.astype(np.int32)
# 内存优化示例
large_arr = np.ones(1000000, dtype=np.float64) # 占用8MB
optimized = large_arr.astype(np.float32) # 优化为4MB
2.2.5 索引与切片技巧
| 索引/切片类型 | 描述/用法 | 示例代码 | 示例输出 |
| 基本索引 | 通过整数索引直接访问元素。索引从0开始。 | arr = np.arange(1, 10).reshape(3,3)<br>print(arr[1, 2]) | 6(第2行第3列的元素) |
| 行/列切片 | 使用冒号 : 切片语法选择行或列的子集。 | print(arr[:, 1])<br>print(arr[::2, ::2]) | [2 5 8](所有行的第2列)<br>[[1, 3], [7, 9]](隔行隔列取样) |
| 连续切片 | 从起始索引到结束索引按步长切片。 | arr = np.arange(10)<br>print(arr[2:9:2])<br>print(arr[2:]) | [2 4 6 8](索引2到8,步长2)<br>[2 3 4 5 6 7 8 9](索引2到最后) |
| 使用 slice 函数 | 通过 slice(start, stop, step) 定义切片规则。 | print(arr[slice(2, 9, 2)]) | [2 4 6 8](等效于 arr[2:9:2]) |
| 布尔索引 | 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。 | data = np.random.randn(100)<br>print(data[(data > 0.5) & (data < 1.0)]) | 输出满足条件 0.5 < data < 1.0 的元素数组。 |
arr = np.arange(1, 10).reshape(3,3)
print(arr[1, 2]) # 第2行第3列 → 6
print(arr[:, 1]) # 所有行的第2列 → [2 5 8]
print(arr[::2, ::2]) # 隔行隔列取样 → [[1,3],[7,9]]
# 布尔索引实战
data = np.random.randn(100)
print(data[(data > 0.5) & (data < 1.0)]) # 条件筛选
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
可以通过内置的slice函数,或者冒号设置start, stop及step参数进行切片,从原数组中切割出一个新数组。
import numpy as np
arr = np.arange(10)
print(arr)
# [0 1 2 3 4 5 6 7 8 9
#获取索引为2的数据
print(arr[2])
# 2
# 从索引 2开始到索引9(不包含)停止,间隔为2
print(arr[slice(2,9,2)])
# [2 4 6 8]
# 从索引2开始到索引9(不包含)停止,间隔为2
print(arr[2:9:2])
# [2 4 6 8]
# 从索引2开始到最后(不包含),默认间隔为1
print(arr[2:])
# [2 3 4 5 6 7 8 9]
# 从索引2开始到索引9(不包含)结束,默认间隔为1
print(arr[2:9])
# [2 3 4 5 6 7 8]
- 切片语法规则:start:stop:step,左闭右开区间(包含 start,不包含 stop)。
- 布尔索引限制:布尔数组的维度需与原数组匹配。
- 内存共享特性:切片返回的是原数组的视图(共享内存),修改切片会影响原数组。需用 copy() 创建独立副本。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END












请登录后查看评论内容