2.2.3.6 高级构造方法

(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、uint64i1,u1i2,u2i4,u4i8,u8有符号、无符号的8位(1字节)整型有符号、无符号的16位(2字节)整型有符号、无符号的32位(4字节)整型有符号、无符号的64位(8字节)整型
float16float32float64f2f4或ff8或d半精度浮点型单精度浮点型双精度浮点型
complex64complex128c8c16用两个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]
  1. 切片语法规则:start:stop:step,左闭右开区间(包含 start,不包含 stop)。
  2. 布尔索引限制:布尔数组的维度需与原数组匹配。
  3. 内存共享特性:切片返回的是原数组的视图(共享内存),修改切片会影响原数组。需用 copy() 创建独立副本。
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容