NumPy
2021-10-28 14:58:18 2 举报
AI智能生成
NumPy使用脉络,持续更新
作者其他创作
大纲/内容
了解Ndarray数组
Ndarray对象
特点
同类型元素
数据类型
数组属性
arr.ndim
秩,即轴的数量或维度的数量
arr.shape
数组的维度,对于矩阵,n 行 m 列
arr.size
数组元素的总个数,相当于 .shape 中 n*m 的值
arr.dtype
ndarray 对象的元素类型
创建数组
自带创建函数
参数说明
shape
数组形状
dtype
数据类型,可选
order
有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
np.empty()
格式
numpy.empty(shape, dtype = float, order = 'C')
实例
np.empty([3,2], dtype = int)
特点
未初始化数组,值随机
np.zeros()
格式
numpy.zeros(shape, dtype = float, order = 'C')
实例
np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])
特点
创建指定大小的数组,数组元素以 0 来填充
np.ones()
格式
numpy.zeros(shape, dtype = float, order = 'C')
实例
np.ones([2,2], dtype = np.int)
特点
创建指定形状的数组,数组元素以 1 来填充
np.eye()
格式
np.eye(n)
特点
创建一个n*n的对角矩阵,对角元素都是1,其他元素是0
从已有数组创建
array()
格式
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
实例
numpy.array(('a','b'))
其他方法
asarray()
格式
numpy.asarray(a, dtype = None, order = None)
实例
np.asarray([1,2,3])
frombuffer()
fromiter()
从数值范围创建数组
np.arange()
格式
numpy.arange(start=0, stop, step=1, dtype)
实例
numpy.arange(5)
特点
创建一个特定间隔的等差数列
不包括stop
np.linspace()
格式
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
特点
创建一个特定数量的等差数列
参数说明
endpoint
该值为 true 时,数列中包含stop值,反之不包含,默认是True
retstep
如果为 True 时,生成的数组中会显示间距,反之不显示
num
要生成的等步长的样本数量/点数量,默认为50
np.logspace()
格式
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
特点
创建一个于等比数列
创建网格
np.meshgrid()
格式
np.meshgrid(*xi, copy=True, sparse=False, indexing='xy')[source]
实例
切片和索引
slice()
a = np.arange(10)
s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s]) # [2 4 6]
s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s]) # [2 4 6]
arr[ start : stop : step ]
a = np.arange(10)
b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2
print(b) # [2 4 6]
b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2
print(b) # [2 4 6]
...
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print (a[...,1]) # 第2列元素
print (a[1,...]) # 第2行元素
print (a[...,1:]) # 第2列及剩下的所有元素
print (a[...,1]) # 第2列元素
print (a[1,...]) # 第2行元素
print (a[...,1:]) # 第2列及剩下的所有元素
行列索引
arr[rows, cols]
arr[rows, cols]
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
y = x[[0,1,2], [0,1,0]]
迭代数组 np.nditer(arr)
格式
np.nditer(array, order="C")
实例
import numpy as np
a = np.arange(6).reshape(2,3)
for x in np.nditer(a.T):
print (x, end=", " )
# 0, 1, 2, 3, 4, 5,
a = np.arange(6).reshape(2,3)
for x in np.nditer(a.T):
print (x, end=", " )
# 0, 1, 2, 3, 4, 5,
参数解析
order
"C"
C 顺序,行优先
"F"
Fortran顺序,列优先
数组操作
广播机制
aa = [1,2]
bb = [3,4]
a = np.array([aa])
b = np.array([bb]).T
a-b
bb = [3,4]
a = np.array([aa])
b = np.array([bb]).T
a-b
必须要再加一个[]
修改数组形状
arr.reshape(newshape, order='C')
newshape
整数或者整数数组
order
'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序
arr.flat
<numpy.flatiter at 0x7fe9480ca000>
一个数组元素迭代器
一个数组元素迭代器
for element in a.flat:
print (element)
print (element)
arr.flatten(order='C')
返回一个一维数组,返回的是拷贝
a = np.arange(8).reshape(2,4)
print (a.flatten(order = 'F')) # [0 4 1 5 2 6 3 7]
print (a.flatten(order = 'F')) # [0 4 1 5 2 6 3 7]
arr.ravel()
返回视图
添加元素
np.vstack()
增加行
np.vstack((arr_1,arr_2))
np.hstack()
增加列
np.vstack((arr_1,arr_2))
np.stack()
np.stack(arrays, axis=0, out=None)
np.column_stack()
实例
np.column_stack((a,b,c))
解释
一般用于一维数组,将数组当做列向量拼接起来
np.row_stack()
实例
np.row_stack((a,b,c))
解释
一般用于一维数组,将数组当做行向量拼接起来
np.append()
格式
np.append(arr, values, axis=None)
参数
values
除了指定axis的arr维度外。其余维度values必须与arr相同
axis
不使用axis,arr和values都会被展平
np.concatenate()
ChildTopic
ChildTopic
翻转数组
转置
np.transpose(arr,axes)
arr.T
修改数组维度
删除长度是1的维度
np.squeeze(arr)
在指定位置增加数组的维度
np.expand_dims(arr, axis)
连接数组
分割数组
入门
参考资料
numpy菜鸟教程
官方文档
导入
import numpy as np
查看版本
print(np.__version__)
基本操作
常量
np.pi
圆周率
np.e
欧拉常数,自然对数的底,纳皮尔常数
np.inf
IEEE754(正)无穷大的浮点表示法。
别名
Inf , Infinity , PINF 和 infty 是别名 inf
数学函数
参考资料
Numpy数学函数abs,sqrt(),square(),exp(),log(),sign(), 四舍五入函数,modf(),isnan(),isfinite()、isinf(),三角函数,二元函数等
向上取整
np.ceil(arr)
绝对值
np.abs(arr)
算数函数
参考资料
NUMPY中几种乘法的区别
四则运算
加
可以连续运算
+
不可以连续运算
np.add(arr1, arr2)
减
可以连续运算
-
不可以连续运算
np.subtract(arr1, arr2)
乘
可以连续运算
*
不可以连续运算
np.multiply(arr1, arr2)
除
可以连续运算
/
不可以连续运算
np.divide(arr1, arr2)
矩阵乘法
np.dot(arr1, arr2)
arr1 @ arr2
位运算符
按位取反(~)
按位与(&)
按位或(|)
异或(^)
右移(>>)
左移(<<)
统计函数
平方根
np.sqrt(x, /, out=None, *, where=True, casting='same_kind',
order='K', dtype=None, subok=True[, signature, extobj])
order='K', dtype=None, subok=True[, signature, extobj])
全局判断
arr.any()
或操作,任意一个元素为True,输出为True
存在非零元素,输出True
判断是否全是0
arr.all()
与操作,所有元素为True,输出为True
存在零元素,输出True
判断是否全是非0
最大最小值
参考资料
numpy中min函数
返回对应轴的最小元素(可能是数组)
np.amin(arr)
别名np.min(arr)
返回对应轴的最小元素(可能是数组)
np.amax(arr)
别名np.max(arr)
中位数
没有axis就展平
np.median(arr, axis = None)
均值
没有axis就展平
np.mean(arr, axis = None)
加权均值
没有axis就展开
mp.average(arr, weights = arr_weight, axis = None)
标准差
衡量数据与数据平均值的分散程度,方差的平方根
np.std()
sqrt(mean((x-x.mean())**2))
方差
衡量数据与数据平均值的分散程度
np.var()
mean((x-x.mean())**2)
求和
没有axis就展开
np.sum(arr, axis=None)
排序函数
数组排序
格式
np.sort(arr, axis, kind, order)
参数
arr
要排序的数组
axis
沿着它排序数组的轴,如果没有数组会被展开,
沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
kind
快速排序
'quicksort'
归并排序
'mergesort'
堆排序
'heapsort'
order
如果数组包含字段,则是要排序的字段
返回数组从小到大的索引值
格式
np.argsort(a, axis=- 1, kind=None, order=None)
参数
axis
排序的轴
kind
快速排序
'quicksort'
默认
归并排序
'mergesort'
堆排序
'heapsort'
稳定排序
'stable'
order
如果数组包含字段,则是要排序的字段
返回最小元素下标,不给axis就展平
np.argmin(a, axis=None, out=None)
格式
axis
不给axis就展平
返回最大元素下标,,不给axis就展平
np.argmax(a, axis=None, out=None)
格式
axis
不给axis就展平
随机库
random
random
参考
python之random和numpy.random
简单随机数据
随机分布数据
正态分布
格式
新版
np.random.Generator.normal(loc=0, scale=1, size=None)
常用
np.random.normal(loc=0, scale=1, size=None)
参数
loc
分布的中心,均值
scale
标准差,非负
size
int或元组,大小
均匀分布
格式
常用
np.random.uniform((low=0.0, high=1.0, size=None))
参数
随机整数
伽马分布
格式
新版
常用
np.random.gamma(shape, scale=1.0, size=None)
参数
shape
scale
离散分布
格式
常用
np.random.choice(a, size=None, replace=True, p=None)
参数
a
选择的范围
如果是整数就是np.arange(a)
size
输出的维度
replace
放不放回/重复选择的问题,默认放回/可以重复
p
a的每个元素的权重
线性代数库
linalg
linalg
对应元素直接相乘
*
矩阵乘法
np.dot(arr1, arr2)
行列式
np.linalg.det(arr)
逆矩阵
np.linalg.inv(arr)
计算特征向量和特征值
evals, evecs = np.linalg.eig(A)
稳定版本,需要A是实数而且对称
np.linalg.eigh()
返回值
特征向量列向量,evecs[:,i]
计算向量欧氏距离
np.linalg.norm(vec)
计算二维矩阵的行向量中心
np.mean(arr, axis=0)
计算向量距离
格式
np.linalg.norm(x, ord=None, axis=None, keepdims=False)
参数
x
如果axis没有设置。就必须是1维或者2维。
如果axis和ord都没有设置,那么x.ravel的第二范数会被返回
如果axis和ord都没有设置,那么x.ravel的第二范数会被返回
ord
整数,np.inf,-np.inf
axis
整数
二元组
用于矩阵范数
计算协方差矩阵
参考
如何直观地理解「协方差矩阵」?
格式
np.cov(m, y=None, rowvar=True, bias=False, ddof=None,
fweights=None, aweights=None, *, dtype=None)
fweights=None, aweights=None, *, dtype=None)
参数
rowvar
默认为True,此时每一行代表一个变量(属性),每一列代表一个观测
如果每行是一个观测,那么rowvar参数要设置为False
特征值分解
格式
u, s, vh = np.linalg.svd(a, full_matrices=True, compute_uv=True, hermitian=False)
举例
对角函数
np.diag()
格式
np.diag(v, k=0)
参数
v
如果v是二维的,返回一维数组,这个一维数组由v的对角元素组成
如果v是一维的,返回二维矩阵,这个二维矩阵是由v的元素组成的对角矩阵
k
k>0
使用高于对角线的对角元素
k<0
使用低于对角线的对角元素
np.diagonal()
格式
参数
比较相等
np.allclose()
格式
np.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
解释
比较两个array是不是每一元素都相等,默认在1e-05的误差范围内
参数
伪逆矩阵
格式
np.linalg.pinv(a, rcond=1e-15, hermitian=False)
IO读取与存储
单个数组
npy文件
npy文件
save
格式
np.save(file, arr, allow_pickle=True, fix_imports=True)
参数说明
file
要保存的文件,扩展名为 .npy,如果文件路径末尾没有扩展名 .npy,
该扩展名会被自动加上。
该扩展名会被自动加上。
arr
要保存的数组
allow_pickle
可选,布尔值,允许使用 Python pickles 保存对象数组,
Python 中的 pickle 用于在保存到磁盘文件或从磁盘文件读取之前,
对对象进行序列化和反序列化。
Python 中的 pickle 用于在保存到磁盘文件或从磁盘文件读取之前,
对对象进行序列化和反序列化。
fix_imports
可选,为了方便 Pyhton2 中读取 Python3 保存的数据。
实例
import numpy as np
a = np.array([1,2,3,4,5])
# 保存到 outfile.npy 文件上
np.save('outfile.npy',a)
# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上
np.save('outfile2',a)
a = np.array([1,2,3,4,5])
# 保存到 outfile.npy 文件上
np.save('outfile.npy',a)
# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上
np.save('outfile2',a)
load
实例
import numpy as np
b = np.load('outfile.npy')
print (b) # [1 2 3 4 5]
b = np.load('outfile.npy')
print (b) # [1 2 3 4 5]
txt文件
savetxt
格式
np.savetxt(FILENAME, a, fmt="%d", delimiter=",")
loadtxt
格式
np.loadtxt(FILENAME, dtype=int, delimiter=' ')
参数说明
delimiter
指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。
fmt
对读取的每个数据进行类型转换
实例
默认保存
import numpy as np
a = np.array([1,2,3,4,5])
np.savetxt('out.txt',a)
b = np.loadtxt('out.txt')
print(b) # [1. 2. 3. 4. 5.]
a = np.array([1,2,3,4,5])
np.savetxt('out.txt',a)
b = np.loadtxt('out.txt')
print(b) # [1. 2. 3. 4. 5.]
保存为整数,逗号分割
import numpy as np
a=np.arange(0,10,0.5).reshape(4,-1)
np.savetxt("out.txt",a,fmt="%d",delimiter=",") # 改为保存为整数,以逗号分隔
b = np.loadtxt("out.txt",delimiter=",") # load 时也要指定为逗号分隔
print(b)
a=np.arange(0,10,0.5).reshape(4,-1)
np.savetxt("out.txt",a,fmt="%d",delimiter=",") # 改为保存为整数,以逗号分隔
b = np.loadtxt("out.txt",delimiter=",") # load 时也要指定为逗号分隔
print(b)
多个数组
npz文件
npz文件
savez
格式
np.savez(file, *args, **kwds)
参数说明
file
要保存的文件,扩展名为 .npz,
如果文件路径末尾没有扩展名 .npz,
该扩展名会被自动加上。
如果文件路径末尾没有扩展名 .npz,
该扩展名会被自动加上。
args
要保存的数组,可以使用关键字参数为数组起一个名字,
非关键字参数传递的数组会自动起名为 arr_0, arr_1, … 。
非关键字参数传递的数组会自动起名为 arr_0, arr_1, … 。
kwds
要保存的数组使用关键字名称。
load
实例
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0, 1.0, 0.1)
c = np.sin(b)
# c 使用了关键字参数 sin_array
np.savez("runoob.npz", a, b, sin_array = c)
r = np.load("runoob.npz")
print(r.files) # 查看各个数组名称
print(r["arr_0"]) # 数组 a
print(r["arr_1"]) # 数组 b
print(r["sin_array"]) # 数组 c
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0, 1.0, 0.1)
c = np.sin(b)
# c 使用了关键字参数 sin_array
np.savez("runoob.npz", a, b, sin_array = c)
r = np.load("runoob.npz")
print(r.files) # 查看各个数组名称
print(r["arr_0"]) # 数组 a
print(r["arr_1"]) # 数组 b
print(r["sin_array"]) # 数组 c
实例
np.savez('datalog.npz', X=X,y_times=y_times,y_cardinality=y_cardinality)
tmp = np.load('datalog.npz')
X = tmp['X']
y_cardinality = tmp['y_cardinality']
tmp = np.load('datalog.npz')
X = tmp['X']
y_cardinality = tmp['y_cardinality']
0 条评论
下一页