这一节了解一下Python中的Numpy基础,NumPy是Python语言的一个扩展程序库,它的核心是ndarray,也就是N维数组对象。你可以把它理解成"高性能、固定大小、元素类型统一"的列表,专门用来存数字、做矩阵和数组运算,简单总结如下:
API:
- np.array():创建ndarray数组,把列表/元组转为numpy数组。numpy最基础入口,支持指定dtype、维度。
python
arr = np.array(序列, dtype=数据类型)
关联A:np.asarray(),区别是array默认拷贝,asarray尽量不拷贝。
2.np.arange():生成等差一维数组,类似python range,支持浮点数。快速生成连续数值序列。
python
arr = np.arange(start, stop, step, dtype)
关联:np.linspace()
3.np.linspace():在起止区间均匀生成指定个数的元素,包含首尾,画函数曲线、采样点。
python
arr = np.linspace(start, stop, num=数量)
关联:np.logspace(等比数列)
4.np.zeros():创建全0数组,初始化占位数组。
python
arr = np.zeros(shape, dtype)
关联:np.zeros_like,按另一个数组形状生成全0。
- np.ones():创建全1数组,权重初始化、掩码。
python
arr = np.ones(shape, dtype)
关联:np.ones_like
- np.empty():创建空数组,不初始化值,追求性能,后续会覆盖所有元素场景。
python
arr = np.empty(shape)
关联:np.empty_like
7.np.eye(),生成单位矩阵,线性代数、矩阵初始化。
python
mat = np.eye(N, M=None)
8.arr.shape,数组属性,返回每个维度的大小元组,查看维度,判断行列。
python
shape_tuple = arr.shape
关联:arr.reshape() 修改形状
- arr.reshape():改变数组形状,不修改原始数据,返回新视图。一维转二维、重塑维度。
python
new_arr = arr.reshape(行, 列)
关联:arr.flatten()、arr.ravel()
10.arr.flatten(),将多维数组展开成一维,返回拷贝。展平数组,修改结果不影响原数组。
python
one_arr = arr.flatten()
关联:arr.ravel()返回视图,修改会影响原数组
11.arr.ndim,属性,获取数组维度数量。判断是一维、二维、三维数组。
python
n = arr.ndim
12.arr.size,属性,查看数组元素数据类型,防止类型溢出、精度丢失。
python
dt = arr.dtype
关联:arr.astype()
- arr.astype():类型强制转换,返回新数组。
python
new_arr = arr.astype(np.float32)
15.np.sum():求和,可指定axis按轴求和,统计总和、行和、列和。
python
s = np.sum(arr, axis=轴编号)
16.np.mean():求平均值,支持axis。
python
m = np.mean(arr, axis=None)
关联:np.average(可加权平均)
- np.max() / arr.max():求最大值,支持axis,找极值。
python
max_val = np.max(arr, axis=0)
关联:np.argmax返回最大值下标
18.np.min() / arr.min():求最小值,支持axis。
python
min_val = np.min(arr)
关联:np.argmin返回最小值下标
- np.argmax():返回最大值对应的索引。
python
idx = np.argmax(arr, axis=1)
- np.argmin():返回最小值对应的索引。
python
idx = np.argmin(arr)
21.np.sqrt():逐元素开平方根。
python
res = np.sqrt(arr)
22.np.exp():逐元素计算自然指数 e^x。
python
res = np.exp(arr)
23.np.concatenate():沿指定轴拼接多个数组。
python
new_arr = np.concatenate([a,b], axis=0)
关联:np.vstack、np.hstack
24.np.vstack():垂直堆叠
python
new_arr = np.vstack([a,b])
25.np.hstack():水平堆叠
python
new_arr = np.hstack([a,b])
26.np.where():条件筛选,满足条件取A,否则取B;也可只返回满足条件的下标。
python
res = np.where(条件, 真值, 假值)
栗子:
python
import numpy as np
# 构造等差数组,重塑成4行5列
arr = np.arange(20).reshape(4,5)
print("原始数组:\n", arr)
all_sum = np.sum(arr)
col_mean = np.mean(arr, axis=0)
row_max = np.max(arr, axis=1)
pos = np.argmax(arr)
print("全部求和:", all_sum)
print("每一列均值:", col_mean)
print("每一行最大值:", row_max)
print("全局最大值下标:", pos)
# where条件替换,大于10的值改为0
filter_arr = np.where(arr > 10, 0, arr)
print("过滤后数组:\n", filter_arr)
a = np.ones((2,5))
b = np.zeros((2,5))
stack_arr = np.vstack([a,b])
print("垂直拼接:\n", stack_arr)
python
import numpy as np
data = np.array([
[12, 45, 7.2],
[18, 39, 8.1],
[9, 52, 6.5],
[22, 41, 9.3],
[15, 44, 7.8]
], dtype=np.float64)
print("原始样本:\n", data)
# 归一化
min_v = np.min(data, axis=0)
max_v = np.max(data, axis=0)
norm_data = (data - min_v) / (max_v - min_v)
print("归一化后:\n", norm_data)
# 展平为一维数组
flat = norm_data.flatten()
print("展平一维:", flat)
# 开根号运算
sqrt_data = np.sqrt(norm_data)
print("开根结果:\n", sqrt_data)
# 筛选:找出第二列特征大于0.5的行
mask = norm_data[:,1] > 0.5
select_data = norm_data[mask]
print("筛选后的样本:\n", select_data)
# 类型转换
int_data = (data * 10).astype(np.int32)
print("转int32:\n", int_data)