Repository navigation
Expand file tree
/
Copy pathdata_numpy.py
More file actions
172 lines (170 loc) · 18 KB
/
Copy pathdata_numpy.py
File metadata and controls
172 lines (170 loc) · 18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# -*- coding: utf-8 -*-
"""NumPy 词条数据。条目格式: (函数名, 签名, 中文说明, 示例代码, 输出)"""
LIB_NAME = "NumPy"
LIB_ID = "numpy"
DATA = [
("数组创建", [
("np.array", "np.array(object, dtype=None)", "从列表/元组创建数组,最基础的创建方式", "np.array([1, 2, 3])", "array([1, 2, 3])"),
("np.asarray", "np.asarray(a, dtype=None)", "同 array,但若输入已是数组则不复制(省内存)", "np.asarray([1.5, 2.5])", "array([1.5, 2.5])"),
("np.zeros", "np.zeros(shape)", "创建全 0 数组,shape 为形状元组", "np.zeros((2, 3))", "array([[0., 0., 0.],\n [0., 0., 0.]])"),
("np.ones", "np.ones(shape)", "创建全 1 数组", "np.ones(3)", "array([1., 1., 1.])"),
("np.empty", "np.empty(shape)", "创建未初始化数组(值是内存残留,仅分配空间快)", "np.empty(2)", "array([x, y]) # 任意值"),
("np.full", "np.full(shape, fill_value)", "创建指定值的定常数组", "np.full((2, 2), 7.0)", "array([[7., 7.],\n [7., 7.]])"),
("np.zeros_like", "np.zeros_like(a)", "按已有数组的形状和 dtype 创建全 0 数组", "np.zeros_like([[1, 2], [3, 4]])", "array([[0, 0],\n [0, 0]])"),
("np.ones_like", "np.ones_like(a)", "按已有数组形状创建全 1 数组", "np.ones_like([1, 2, 3])", "array([1, 1, 1])"),
("np.arange", "np.arange(start, stop, step)", "等差序列数组(不含 stop),类似 range 但返回数组", "np.arange(0, 10, 2)", "array([0, 2, 4, 6, 8])"),
("np.linspace", "np.linspace(start, stop, num)", "等间隔取 num 个点(含两端),量化回测画收益轴常用", "np.linspace(0, 1, 5)", "array([0. , 0.25, 0.5 , 0.75, 1. ])"),
("np.logspace", "np.logspace(start, stop, num)", "对数等间隔(10^start 到 10^stop),调超参数学习率网格常用", "np.logspace(0, 2, 3)", "array([ 1., 10., 100.])"),
("np.eye", "np.eye(N)", "N×N 单位矩阵(对角线为 1)", "np.eye(3)", "array([[1., 0., 0.],\n [0., 1., 0.],\n [0., 0., 1.]])"),
("np.identity", "np.identity(n)", "同 eye,创建单位矩阵", "np.identity(2)", "array([[1., 0.],\n [0., 1.]])"),
("np.diag", "np.diag(v)", "向量→对角矩阵;矩阵→取对角线向量", "np.diag([1, 2, 3])", "array([[1, 0, 0],\n [0, 2, 0],\n [0, 0, 3]])"),
("np.tile", "np.tile(a, reps)", "整体重复平铺数组", "np.tile([1, 2], 2)", "array([1, 2, 1, 2])"),
("np.repeat", "np.repeat(a, repeats)", "逐元素重复", "np.repeat([1, 2], 2)", "array([1, 1, 2, 2])"),
("np.copy", "np.copy(a)", "深拷贝数组(= 是浅拷贝视图时要注意)", "b = np.copy(a)", "独立副本,改 b 不影响 a"),
("np.meshgrid", "np.meshgrid(x, y)", "两个一维向量→二维网格坐标(画 3D 图/向量场用)", "X, Y = np.meshgrid([1,2], [3,4])", "X=[[1,2],[1,2]], Y=[[3,3],[4,4]]"),
("np.frombuffer / fromiter", "np.fromiter(iter, dtype)", "从可迭代对象创建数组", "np.fromiter(range(3), dtype=int)", "array([0, 1, 2])"),
]),
("形状与变换", [
("shape", "a.shape", "数组形状(各维长度元组)", "np.zeros((2,3)).shape", "(2, 3)"),
("ndim", "a.ndim", "维度个数", "np.zeros((2,3)).ndim", "2"),
("size", "a.size", "元素总个数", "np.zeros((2,3)).size", "6"),
("dtype", "a.dtype", "元素数据类型", "np.array([1]).dtype", "dtype('int32')"),
("astype", "a.astype(dtype)", "转换数据类型(浮点→整型会截断)", "np.array([1.7]).astype(int)", "array([1])"),
("reshape", "a.reshape(shape)", "重塑形状(元素总数须一致,-1 自动推断)", "np.arange(6).reshape(2, 3)", "array([[0, 1, 2],\n [3, 4, 5]])"),
("ravel / flatten", "a.ravel()", "展平成一维(ravel 返回视图,flatten 返回拷贝)", "np.arange(6).reshape(2,3).ravel()", "array([0, 1, 2, 3, 4, 5])"),
("transpose / T", "a.T / a.transpose()", "转置(交换行列)", "np.arange(4).reshape(2,2).T", "array([[0, 2],\n [1, 3]])"),
("swapaxes", "a.swapaxes(ax1, ax2)", "交换指定的两个轴", "a.swapaxes(0, 1)", "等价于二维转置"),
("moveaxis", "np.moveaxis(a, src, dst)", "把某个轴移到新位置(CNN 通道变换常用)", "np.moveaxis(a, 0, -1)", "第0轴移到最后"),
("expand_dims", "np.expand_dims(a, axis)", "在指定位置插入长度 1 的新轴(升维)", "np.expand_dims([1, 2], 0)", "array([[1, 2]])"),
("squeeze", "np.squeeze(a)", "删除所有长度 1 的轴(降维)", "np.squeeze([[[1, 2]]])", "array([1, 2])"),
("np.concatenate", "np.concatenate([a, b], axis=0)", "沿现有轴拼接数组", "np.concatenate([[1],[2]], [[3]])", "array([[1],[2],[3]])"),
("np.stack", "np.stack([a, b], axis=0)", "沿新轴堆叠(形状须相同)", "np.stack([1, 2], [3, 4])", "array([[1, 2],\n [3, 4]])"),
("np.vstack", "np.vstack([a, b])", "垂直拼接(按行堆,列数须同)", "np.vstack([[1,2]], [[3,4]])", "array([[1, 2],\n [3, 4]])"),
("np.hstack", "np.hstack([a, b])", "水平拼接(按列拼,行数须同)", "np.hstack([[1],[2]], [[3],[4]])", "array([[1, 3],\n [2, 4]])"),
("np.split", "np.split(a, n)", "把数组切成 n 份(返回列表)", "np.split(np.arange(6), 2)", "[array([0,1,2]), array([3,4,5])]"),
("np.roll", "np.roll(a, shift)", "循环滚动元素(尾部绕回头部)", "np.roll([1,2,3], 1)", "array([3, 1, 2])"),
("np.flip", "np.flip(a)", "沿轴翻转数组", "np.flip([1, 2, 3])", "array([3, 2, 1])"),
]),
("索引与切片", [
("基础切片", "a[start:stop:step]", "切片语法同 Python 列表,可对每个轴分别切", "a = np.arange(6); a[1:5:2]", "array([1, 3])"),
("花式索引", "a[[0, 2, 2]]", "用整数列表一次取多个元素(可重复)", "np.arange(5)[[0, 2, 2]]", "array([0, 2, 2])"),
("布尔索引", "a[a > 2]", "用条件掩码筛选元素(量化里筛收益率超阈值)", "a = np.arange(5); a[a > 2]", "array([3, 4])"),
("np.where", "np.where(cond, x, y)", "条件向量化:满足取 x 否则取 y(相当于 Excel IF)", "np.where([True, False], 1, -1)", "array([ 1, -1])"),
("np.argwhere", "np.argwhere(cond)", "返回满足条件的元素坐标(行列表形式)", "np.argwhere(np.arange(4) > 1)", "array([[2],\n [3]])"),
("np.nonzero", "np.nonzero(a)", "非零元素的下标", "np.nonzero([0, 1, 0, 2])", "(array([1, 3], dtype=int64),)"),
("np.take", "a.take(indices)", "按索引取元素(等价花式索引的函数形式)", "np.arange(5).take([1, 3])", "array([1, 3])"),
("np.indices", "np.indices(shape)", "生成网格下标数组(配合 meshgrid 场景)", "np.indices((2, 2))[0]", "array([[0, 0],\n [1, 1]])"),
]),
("数学运算", [
("np.abs", "np.abs(x)", "绝对值", "np.abs(-3.5)", "3.5"),
("np.sign", "np.sign(x)", "符号函数:正→1,负→-1,零→0(动量策略仓位生成核心)", "np.sign([0.5, -0.5])", "array([ 1., -1.])"),
("np.sqrt", "np.sqrt(x)", "平方根(开根号)", "np.sqrt(4)", "2.0"),
("np.exp", "np.exp(x)", "e 的 x 次方(log 收益还原价格比)", "np.exp(1)", "2.718281828459045"),
("np.log / log2 / log10", "np.log(x)", "自然对数 / 以2、10为底(log 收益 = np.log(P/P.shift))", "np.log(np.e)", "1.0"),
("np.power / **", "np.power(x, n)", "幂运算(等价 x ** n)", "np.power(2, 10)", "1024"),
("np.square", "np.square(x)", "平方", "np.square(3)", "9"),
("np.floor", "np.floor(x)", "向下取整", "np.floor(2.7)", "2.0"),
("np.ceil", "np.ceil(x)", "向上取整", "np.ceil(2.1)", "3.0"),
("np.rint", "np.rint(x)", "四舍五入到最近整数(返回浮点)", "np.rint(2.5)", "2.0"),
("np.trunc / fix", "np.trunc(x)", "截断小数部分(向零取整)", "np.trunc(-2.8)", "-2.0"),
("np.mod / remainder", "np.mod(x, y)", "取模(除法余数)", "np.mod(7, 3)", "1"),
("np.divmod", "np.divmod(x, y)", "同时返回商和余数", "np.divmod(7, 3)", "(3, 1)"),
("np.clip", "np.clip(x, lo, hi)", "裁剪到区间 [lo, hi](限仓/截尾winsorize 常用)", "np.clip([-3, 1, 5], -1, 1)", "array([-1, 1, 1])"),
("np.around / round", "np.around(x, decimals=0)", "四舍五入到指定小数位", "np.around(3.14159, 2)", "3.14"),
("np.maximum / minimum", "np.maximum(a, b)", "逐元素取大/取小(注意与 max 聚合的区别)", "np.maximum([1, 5], [3, 2])", "array([3, 5])"),
("np.add / subtract / multiply / divide", "np.add(a, b)", "四则运算的函数形式(+ - * / 等价)", "np.add(1, 2)", "3"),
("np.negative", "np.negative(x)", "取相反数", "np.negative(5)", "-5"),
("np.reciprocal", "np.reciprocal(x)", "倒数 1/x", "np.reciprocal(4.)", "0.25"),
]),
("三角与角度", [
("np.sin / cos / tan", "np.sin(x)", "三角函数(弧度制)", "np.sin(0)", "0.0"),
("np.arcsin / arccos / arctan", "np.arctan(x)", "反三角函数", "np.arctan(1)", "0.7853981633974483"),
("np.arctan2", "np.arctan2(y, x)", "双参数反正切(自动判断象限)", "np.arctan2(1, 1)", "0.7853981633974483"),
("np.deg2rad / rad2deg", "np.deg2rad(x)", "角度↔弧度互换", "np.deg2rad(180)", "3.141592653589793"),
("np.hypot", "np.hypot(x, y)", "直角三角形斜边 sqrt(x²+y²)(欧氏距离)", "np.hypot(3, 4)", "5.0"),
]),
("统计与归约", [
("np.sum", "np.sum(a, axis=None)", "求和,axis 指定沿哪轴(axis=0 按列,1 按行)", "np.sum([[1,2],[3,4]])", "10"),
("np.prod", "np.prod(a)", "连乘积", "np.prod([1, 2, 3, 4])", "24"),
("np.cumsum", "np.cumsum(a)", "累计求和(log 收益→累计 log 收益)", "np.cumsum([0.1, 0.2])", "array([0.1, 0.3])"),
("np.cumprod", "np.cumprod(a)", "累计连乘(simple 收益复原净值 (1+R).cumprod())", "np.cumprod([1.1, 1.2])", "array([1.1 , 1.32])"),
("np.mean", "np.mean(a, axis=None)", "均值", "np.mean([1, 2, 3])", "2.0"),
("np.median", "np.median(a)", "中位数(抗离群值)", "np.median([1, 2, 100])", "2.0"),
("np.average", "np.average(a, weights=w)", "加权平均(组合权重算组合收益)", "np.average([1, 2], weights=[0.7, 0.3])", "1.3"),
("np.std", "np.std(a, ddof=0)", "标准差(波动率;ddof=1 为样本口径)", "np.std([1, 2, 3])", "0.816496580927726"),
("np.var", "np.var(a, ddof=0)", "方差(std 的平方)", "np.var([1, 2, 3])", "0.6666666666666666"),
("np.min / max", "np.min(a) / np.max(a)", "最小值 / 最大值", "np.max([1, 5, 2])", "5"),
("np.argmin / argmax", "np.argmax(a)", "最值所在下标(找最优参数组合常用)", "np.argmax([1, 5, 2])", "1"),
("np.ptp", "np.ptp(a)", "极差 max-min(peak to peak)", "np.ptp([1, 5, 2])", "4"),
("np.percentile", "np.percentile(a, q)", "百分位数(q=95 即 95 分位)", "np.percentile([1,2,3,4], 50)", "2.5"),
("np.quantile", "np.quantile(a, q)", "分位数(q∈[0,1],同 percentile 的比例版)", "np.quantile([1,2,3,4], 0.5)", "2.5"),
("nan 系列", "np.nanmean / nanstd / nansum", "忽略 NaN 的统计量(金融缺失数据必备)", "np.nanmean([1, np.nan, 3])", "2.0"),
("np.corrcoef", "np.corrcoef(x, y)", "皮尔逊相关系数矩阵(相关性分析)", "np.corrcoef([1,2,3], [2,4,6])[0,1]", "0.9999999999999998"),
("np.cov", "np.cov(x, y)", "协方差矩阵(组合优化输入)", "np.cov([1,2,3], [2,1,1])", "2x2 协方差矩阵"),
("np.histogram", "np.histogram(a, bins)", "直方图统计(返回频数和边界)", "np.histogram([1,1,2,3], bins=2)", "(array([2,2]), array([1.,2.,3.]))"),
("np.bincount", "np.bincount(x)", "非负整数计数(0..max 各出现几次)", "np.bincount([0, 1, 1, 3])", "array([1, 2, 0, 1])"),
("np.digitize", "np.digitize(x, bins)", "把数值归入哪个区间(收益分箱)", "np.digitize([0.2, 1.5], [0.5, 1.0])", "array([0, 2])"),
]),
("排序与去重", [
("np.sort", "np.sort(a, axis=-1)", "返回排序后的拷贝(默认快排升序)", "np.sort([3, 1, 2])", "array([1, 2, 3])"),
("np.argsort", "np.argsort(a)", "返回排序后的原下标(按某列排序行时神技)", "np.argsort([3, 1, 2])", "array([1, 2, 0])"),
("np.lexsort", "np.lexsort(keys)", "多关键字排序(最后一项为主键)", "np.lexsort([[1,0],[0,1]])", "array([1, 0])"),
("np.unique", "np.unique(a)", "去重并排序(可返回下标/计数)", "np.unique([2, 1, 2, 1])", "array([1, 2])"),
("np.searchsorted", "np.searchsorted(a, v)", "二分查找插入位置(a 须有序)", "np.searchsorted([1,3,5], 4)", "2"),
("np.partition", "np.partition(a, k)", "部分排序:第 k 位左边都≤它(找 TopK 快)", "np.partition([5,1,4,2,3], 2)", "array([2, 1, 3, 5, 4])"),
("np.diff", "np.diff(a, n=1)", "n 阶差分(相邻元素差,价格→变化量)", "np.diff([1, 3, 6])", "array([2, 3])"),
("np.ediff1d", "np.ediff1d(a)", "一维差分(diff 的一维友好版)", "np.ediff1d([1, 3, 6])", "array([2, 3])"),
]),
("逻辑与比较", [
("np.all", "np.all(a)", "全部为真才 True(AND 归约)", "np.all([True, False])", "False"),
("np.any", "np.any(a)", "任一为真即 True(OR 归约)", "np.any([True, False])", "True"),
("np.isnan", "np.isnan(x)", "判断是否 NaN(筛选缺失)", "np.isnan([1, np.nan])", "array([False, True])"),
("np.isinf / isfinite", "np.isinf(x)", "是否无穷大 / 是否有限数", "np.isinf([1, np.inf])", "array([False, True])"),
("np.isclose", "np.isclose(a, b)", "浮点近似相等(容差比较)", "np.isclose(0.1+0.2, 0.3)", "True"),
("np.allclose", "np.allclose(a, b)", "数组整体近似相等(回测对拍神器)", "np.allclose([0.1+0.2], [0.3])", "True"),
("比较运算", "a == b / > / < / >= / <=", "逐元素比较,返回布尔数组", "np.array([1,2]) > 1", "array([False, True])"),
("np.logical_and / or / not / xor", "np.logical_and(a, b)", "布尔数组的与/或/非/异或(& | ~ ^ 等价但要注意括号)", "np.logical_and([True,False],[True,True])", "array([ True, False])"),
("np.equal / not_equal", "np.equal(a, b)", "等价 == 的函数形式(可配合 where)", "np.equal(1, 1)", "True"),
]),
("线性代数", [
("np.dot", "np.dot(a, b)", "点积:一维内积、二维矩阵乘", "np.dot([1,2], [3,4])", "11"),
("np.matmul / @", "a @ b", "矩阵乘法(Python 3 推荐用 @)", "np.eye(2) @ [1, 2]", "array([1., 2.])"),
("np.inner", "np.inner(a, b)", "内积(同 dot 一维情形)", "np.inner([1,2],[3,4])", "11"),
("np.outer", "np.outer(a, b)", "外积(列向量×行向量得矩阵)", "np.outer([1,2],[3,4])", "array([[3, 4],\n [6, 8]])"),
("np.cross", "np.cross(a, b)", "三维向量叉积", "np.cross([1,0,0],[0,1,0])", "array([0, 0, 1])"),
("np.vdot", "np.vdot(a, b)", "向量点积(先展平)", "np.vdot([1,2],[3,4])", "11"),
("np.tensordot", "np.tensordot(a, b, axes)", "张量缩并(指定轴做内积)", "np.tensordot(a, b, axes=1)", "等价矩阵乘"),
("np.trace", "np.trace(a)", "矩阵迹(对角线元素和)", "np.trace(np.eye(3))", "3.0"),
("linalg.norm", "np.linalg.norm(x)", "向量/矩阵范数(默认 L2,正则化和归一化用)", "np.linalg.norm([3, 4])", "5.0"),
("linalg.inv", "np.linalg.inv(a)", "矩阵求逆(解方程/组合权重)", "np.linalg.inv([[1,2],[3,4]])", "array([[-2. , 1. ],\n [1.5, -0.5]])"),
("linalg.pinv", "np.linalg.pinv(a)", "伪逆(奇异矩阵也可求,最小二乘解)", "np.linalg.pinv(a)", "Moore-Penrose 伪逆"),
("linalg.det", "np.linalg.det(a)", "行列式(=0 说明矩阵奇异不可逆)", "np.linalg.det([[1,2],[3,4]])", "-2.0000000000000004"),
("linalg.solve", "np.linalg.solve(A, b)", "解线性方程组 Ax=b(比先求逆再乘快且稳)", "np.linalg.solve([[1,1]],[2,4] 的方阵形式)", "x 使 Ax=b 成立"),
("linalg.lstsq", "np.linalg.lstsq(A, b)", "最小二乘解(回归系数)", "np.linalg.lstsq(X, y, rcond=None)", "返回系数等元组"),
("linalg.eig", "np.linalg.eig(a)", "特征值和特征向量(PCA/马科维茨)", "np.linalg.eig(np.eye(2))", "特征值都是 1"),
("linalg.eigh", "np.linalg.eigh(a)", "对称/厄米矩阵特征分解(更快更稳,协方差矩阵用它)", "np.linalg.eigh(np.eye(2))", "特征值 1, 1"),
("linalg.svd", "np.linalg.svd(a)", "奇异值分解 SVD(降维/去噪/求伪逆)", "U, S, Vt = np.linalg.svd(a)", "A ≈ U·diag(S)·Vt"),
("linalg.matrix_rank", "np.linalg.matrix_rank(a)", "矩阵秩(判断共线性)", "np.linalg.matrix_rank(np.eye(3))", "3"),
("linalg.qr", "np.linalg.qr(a)", "QR 分解(正交化)", "Q, R = np.linalg.qr(a)", "A = Q·R"),
]),
("随机数", [
("default_rng", "rng = np.random.default_rng(seed)", "新版推荐随机数生成器(NumPy≥1.17,替代全局 seed)", "rng = np.random.default_rng(42)", "Generator 对象"),
("rng.random", "rng.random(size)", "[0,1) 均匀随机数", "rng.random(3)", "array([0.77395605, 0.43887844, 0.85859792])"),
("rng.integers", "rng.integers(lo, hi, size)", "随机整数 [lo, hi)", "rng.integers(0, 10, 3)", "array([0, 7, 6])"),
("rng.normal", "rng.normal(mu, sigma, size)", "正态分布抽样(模拟日收益)", "rng.normal(0, 0.01, 3)", "3 个 ~N(0,0.01) 数"),
("rng.standard_normal", "rng.standard_normal(size)", "标准正态 N(0,1) 抽样", "rng.standard_normal(2)", "array([-0.297, 0.49]) 近似"),
("rng.uniform", "rng.uniform(lo, hi, size)", "均匀分布 [lo, hi] 抽样", "rng.uniform(-1, 1, 3)", "3 个 [-1,1] 均匀数"),
("rng.choice", "rng.choice(a, size, replace)", "随机抽样(bootstrap/采样,replace=False 不放回)", "rng.choice([1,2,3], 2, replace=False)", "array([3, 1]) 类似"),
("rng.shuffle", "rng.shuffle(a)", "原地打乱(训练集乱序)", "rng.shuffle(a)", "a 顺序被随机打乱"),
("rng.permutation", "rng.permutation(a)", "返回打乱副本(不动原数组)", "rng.permutation([1,2,3])", "array([2, 1, 3]) 类似"),
("np.random.seed", "np.random.seed(n)", "旧版全局种子(很多老代码还在用)", "np.random.seed(42)", "之后的 rand 系列可复现"),
("np.random.rand / randn", "np.random.rand(d0, d1)", "旧版均匀/标准正态(直接给形状)", "np.random.randn(2)", "array([0.4967, -0.1382]) 类似"),
]),
("NaN 与特殊常量", [
("np.nan", "np.nan", "缺失值常量(NaN != NaN,判断用 isnan)", "np.nan == np.nan", "False"),
("np.inf", "np.inf", "正无穷常量(除零警戒/初始最值)", "best = np.inf", "常作初始最大值"),
("np.nan_to_num", "np.nan_to_num(x)", "NaN→0、inf→大数(清洗后喂模型)", "np.nan_to_num([np.nan, 1])", "array([0., 1.])"),
("np.count_nonzero", "np.count_nonzero(a)", "非零元素计数(配合 isnan 数缺失)", "np.count_nonzero([0,1,0])", "1"),
("np.isnat", "np.isnat(x)", "是否 NaT(时间戳版的 NaN)", "np.isnat(np.datetime64('NaT'))", "True"),
]),
]