Numpy库使用总结
一、总结
一句话总结:
NumPy:大数据量的纯粹数组处理,以及复杂函数和线性代数等
1、numpy中创建矩阵的方法?
numpy中的数据结构主要是同构的多维数组,所以创建数组的方法主要有array和arange方法,当然还有其它的一些比如linspace等等
arr = np.array([[1,2,3],[4,5,6]])
arr = np.arange(6).reshape((2,3))
2、numpy库中创建数组方法array和asarray的区别?
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,【array仍然会copy出一个副本,占用新的内存,但asarray不会】
3、numpy中的特殊矩阵?
numpy中的特殊矩阵 主要有ones(全1)、zeros(全0)、eye(单位矩阵)、empty(未初始化)
np.ones((3,4)) np.zeros((3,4)) np.eye(2) np.empty((6,4))
4、numpy中的常用属性?
numpy的多维数组常用属性主要有dtype(数据类型)、ndim(维度)、shape(性状)、size(元素个数)
arr = np.arange(12).reshape((3,4)) print(arr) # 数据类型 print(arr.dtype) # 维数 print(arr.ndim) # 行数和列数 print(arr.shape) # 大小,也就是元素个数 print(arr.size) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] int32 2 (3, 4) 12
5、numpy中的基本计算?
numpy中的ndarray对象重载了许多运算符,使用这些运算符可以完成矩阵间对应元素的运算。如 +,-,*(内积),/,%,**(次方),@(矩阵阶层)
# 矩阵内积:对应位置相乘 print(arr1*arr2) # 矩阵乘法: print(arr1@arr2) print(np.dot(arr1,arr2)) print(arr1.dot(arr2))
6、numpy中的常用函数?
numpy常用多维函数有sin、sqrt、sort、transpose、max、
mean(average)、sum、median(中位数)、var(方差)、std(标准差)、cumsum(累加)、
np.clip(arr,5,9)(小于5的数全部让它变成5,大于9的数全部是9)
7、numpy中axis为0为1表示的意思是什么?
axis为0表示对列进行操作,axis为1表示为行进行操作
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] # 平均数 print(arr.mean()) print(np.average(arr)) print(np.average(arr,axis=0)) # 0是列 print(np.average(arr,axis=1)) # 1是行 5.75 5.75 [4. 5. 7. 7.] [1.5 6.25 9.5 ]
8、numpy中索引?
numpy中,可以像普通数组一样用下标来访问元素,比如a[1][1]、a[1,1]
9、numpy中访问行列元素?
a[1,:](打印下标为1的行所有数)
a[:,1](打印下标为1的列的所有数)
a[1,1:3](第1行 列从1-2)
10、numpy中迭代行循环打印即可,如何迭代列?
将矩阵转置即可
# 迭代列 (转置一下即可实现) for i in a.T: print(i)
11、numpy中如何迭代多维数组的每一个数?
for i in a.flat: print(i)
12、numpy中数组合并?
numpy数组水平合并可以np.hstack((a,b)),类似于np.concatenate((a,b,a),axis=1)
numpy数组垂直合并可以np.vstack((a,b)),类似于np.concatenate((a,b,a),axis=0)
13、numpy中数组分割?
等量分割:水平分成两块np.split(a,2,axis=1),vsplit和hsplit也可以等量分割
不等量分割:np.array_split(a,3,axis=1)
14、numpy中数组拷贝?
numpy 中的 copy方法是 deep copy:b = np.copy(a)
二、Numpy库使用总结
博客对应课程的视频位置:
一、numpy库概述
numpy库是做什么的
大数据量的纯粹数组处理,以及复杂函数和线性代数等
NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。
numpy库核心
numpy的结构是纯粹的ndarray
numpy库和pandas库的关系
NumPy:大数据量的纯粹数组处理,以及复杂函数和线性代数等 Pandas:处理非纯粹的、混杂数组
虽然NumPy有着以上的种种出色的特性,其本身则难以独支数据分析这座大厦,这是一方面是由于NumPy几乎仅专注于数组处理, 另一方面则是数据分析牵涉到的数据特性众多,需要处理各种表格和混杂数据,远非纯粹的数组(NumPy)方便解决的,而这就是pandas发力的地方。
NumPy在大数组的数据处理方面进行的优化?
- 【连续的内存块】:NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象,如此便可以加速数据索引的速度。
- 【调用大量c语言算法库】:NumPy调用了大量的用C语言编写的算法库,使得其可以直接操作内存,不必进行Python动态语言特性所含有的前期类型检查工作,从而大大提高了运算速度。
- 【整数组直接计算】:NumPy所有独有的可以在整个数组上执行复杂的计算也能够大幅提高运算效率(基于NumPy的算法要比纯Python快10到100倍,甚至会快更多)。
上百G的数据如何处理
Python处理几个G的数据绰绰有余,至于几十G也勉强可以,而上百G的数据这就算是Hadoop与Spark系列的任务,不是Python的NumPy与pandas可以应付的,也不是R语言某个第三方包可以处理的。
NumPy数组 和 原生Python Array(数组)之间有几个重要的区别
- NumPy 数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原来的数组。
- NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。
- NumPy 数组有助于对大量数据进行高级数学和其他类型的操作。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。
- 越来越多的基于Python的科学和数学软件包使用NumPy数组; 虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前会还是会将输入的数组转换为NumPy的数组,而且也通常输出为NumPy数组。
对应博客资料
如何通过一顿饭来说明NumPy与pandas的功用 - 范仁义 - 博客园 https://www.cnblogs.com/Renyi-Fan/p/13232318.html
二、创建矩阵
numpy库中创建数组方法array和asarray的区别
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,
意思是对数据源进行重新赋值的话,array转化后的数据不变,asarray转化后的数据也会跟着数据源重新被赋值。
创建矩阵的方法
numpy中的数据结构主要是同构的多维数组,所以创建数组的方法主要有array和arange方法,当然还有其它的一些比如linspace等等
arr = np.array([[1,2,3],[4,5,6]])
arr = np.arange(6).reshape((2,3))
# 安装库
# pip install numpy # 查看安装的库 # pip list # 引入库 import numpy as np
1、array方法
# numpy的核心是n维数组,所以创建数组是array方法
arr = np.array([[1,2,3], [4,5,6]]) print(arr)
# 指定类型
arr = np.array([1,2,3],dtype=np.int64) print(arr) print(arr.dtype)
# 同构还是异构
# 原生python中 list1 = [1,True,"a",[1,23]] print(list1) # numpy中 arr = np.array([1,True,'a']) print(arr) print(arr.dtype) # 可以看到结果里面全部转化成了字符串,也就是全部转化为了同一类型
2、arange方法
为了创建数字组成的数组,NumPy提供了一个类似于range的函数arange,该函数返回数组而不是列表。
arr = np.arange(10) print(arr) # 指定起点和终点 arr = np.arange(10,20) print(arr) # 指定步长 arr = np.arange(10,20,3) print(arr)
# reshape方法改变维数
arr = np.arange(6).reshape((2,3)) print(arr)
# 等差数列
arr = np.linspace(1,3,5) print(arr) print(arr.dtype)
# 等比数列
arr = np.logspace(1,3,5) print(arr) print(arr.dtype)
三、特殊矩阵
numpy中的特殊矩阵
numpy中的特殊矩阵 主要有ones(全1)、zeros(全0)、eye(单位矩阵)、empty(未初始化)
np.ones((3,4))
np.zeros((3,4))
np.eye(2)
np.empty((6,4))
# 参数是一个元组,来指定行列
arr = np.ones((3,4)) print(arr)
arr = np.zeros((3,4)) print(arr)
help(np.eye)
# 对角矩阵的行列肯定是一样的
arr = np.eye(2) print(arr)
# empty为空,表示没有初始化的意思
arr1 = np.empty((6,4)) print(arr1)
四、常用属性
numpy的多维数组常用属性主要有dtype(数据类型)、ndim(维度)、shape(性状)、size(元素个数)
arr = np.arange(12).reshape((3,4))
print(arr)
# 数据类型
print(arr.dtype)
# 维数
print(arr.ndim)
# 行数和列数
print(arr.shape)
# 大小,也就是元素个数
print(arr.size)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
int32
2
(3, 4)
12
arr = np.arange(12).reshape((3,4)) print(arr) # 数据类型 print(arr.dtype) # 维数 print(arr.ndim) # 行数和列数 print(arr.shape) # 大小,也就是元素个数 print(arr.size)
五、基本计算
numpy中的ndarray对象重载了许多运算符,使用这些运算符可以完成矩阵间对应元素的运算。
如 +,-,*(内积),/,%,**(次方),@(矩阵阶层)
# 矩阵内积:对应位置相乘
print(arr1*arr2)
# 矩阵乘法:
print(arr1@arr2)
print(np.dot(arr1,arr2))
print(arr1.dot(arr2))
arr1 = np.array([[0,1],[1,2]]) arr2 = np.arange(4).reshape((2,2)) ans = arr1 + arr2 print(arr1) print(arr2) print("===========================") print(ans) print(arr2-arr1)
# 矩阵内积:对应位置相乘
print(arr1*arr2) # 矩阵乘法: print(arr1@arr2) print(np.dot(arr1,arr2)) print(arr1.dot(arr2))
print(arr1*3)
print(arr1/2)
print(arr1**2)
print(arr2%3)
六、常用函数
numpy常用多维函数有sin、sqrt、sort、transpose、max、
mean(average)、sum、median(中位数)、var(方差)、std(标准差)、cumsum(累加)、
np.clip(arr,5,9)(小于5的数全部让它变成5,大于9的数全部是9)
axis为0为1表示的意思是什么
axis为0表示对列进行操作,axis为1表示为行进行操作
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
# 平均数
print(arr.mean())
print(np.average(arr))
print(np.average(arr,axis=0)) # 0是列
print(np.average(arr,axis=1)) # 1是行
5.75
5.75
[4. 5. 7. 7.]
[1.5 6.25 9.5 ]
arr = np.arange(12).reshape((3,4)) print(arr) print(np.sin(arr)) print(np.sqrt(arr))
# 随机数 排序 转置 求平均数
arr = np.random.random(12).reshape((3,4)) print(arr) # 默认每行排序 print(np.sort(arr))
arr = np.random.random(12).reshape((3,4)) print(arr) # 指定列排序 print(np.sort(arr,axis=0))
# 转置
arr = np.arange(12).reshape((3,4)) print(arr) print(arr.T) print(arr.transpose())
# max,min
# 0是列(一列来操作),1是行(一行来操作) arr = np.arange(12).reshape((3,4)) arr[1][2]=9 print(arr) print(np.max(arr)) print(np.max(arr,axis=0)) print(np.max(arr,axis=1))
# 平均数
print(arr.mean()) print(np.average(arr)) print(np.average(arr,axis=0)) # 0是列 print(np.average(arr,axis=1)) # 1是行
# 中位数
print(np.median(arr)) print(np.median(arr,axis=0)) # 0是列 print(np.median(arr,axis=1)) # 1是行
# 方差和标准差
# 方差的函数为var(),方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。 print(np.var(arr)) # 标准差的函数为std(), std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())。 print(np.std(arr))
# 求和
print(np.sum(arr))
# 累加
print(arr) print(np.cumsum(arr))
# 小于5的数全部让它变成5
# 大于9的数全部是9 print(np.clip(arr,5,9))
help(np.clip)
七、索引和迭代
numpy中,可以像普通数组一样用下标来访问元素,比如a[1][1]、a[1,1]
numpy中访问行列元素
a[1,:](打印下标为1的行所有数)
a[:,1](打印下标为1的列的所有数)
a[1,1:3](第1行 列从1-2)
numpy中迭代行循环打印即可,如何迭代列
将矩阵转置即可
# 迭代列 (转置一下即可实现)
for i in a.T:
print(i)
numpy中如何迭代多维数组的每一个数
for i in a.flat: print(i)
a = np.arange(3,15) print(a) # 索引像数组一样 print(a[3])
# 二维数组
a = np.arange(3,15).reshape((3,4)) print(a) # 索引像数组一样 print(a[1]) print(a[1][1]) print(a[1,1])
# 打印下标为1的行所有数
print(a[1,:]) # 打印下标为1的列的所有数 print(a[:,1]) # 第1行 列从1-2 print(a[1,1:3])
# 迭代行
a = np.arange(3,15).reshape((3,4)) print(a) for i in a: print(i)
# 迭代列 (转置一下即可实现)
for i in a.T: print(i)
# 迭代每一个数
print(a.flatten()) # flatten() 和 flat的区别 # flat是一个迭代器 for i in a.flat: print(i)
八、数组合并
numpy数组水平合并可以np.hstack((a,b)),类似于np.concatenate((a,b,a),axis=1)
numpy数组垂直合并可以np.vstack((a,b)),类似于np.concatenate((a,b,a),axis=0)
a = np.array([1,2,3]) b = np.array([4,5,6]) # 合并数组 # 上下合并 vertical stack c = np.vstack((a,b)) print(c) print(a.shape) print(c.shape)
# 左右合并 horizontal
c = np.hstack((a,b)) print(c)
# 如何实现把一个横向的数列变成一个竖向的数列
a = np.array([1,2,3]) # 在行上加了一个维度 print(a[np.newaxis,:]) # 在列上加了一个维度 print(a[:,np.newaxis])
a = np.array([1,2,3])[:,np.newaxis] b = np.array([4,5,6])[:,np.newaxis] print(a) print(b) print("====================") c = np.concatenate((a,b,a),axis=0) print(c) print("====================") d = np.concatenate((a,b,a),axis=1) print(d)
九、数组分割
等量分割:水平分成两块np.split(a,2,axis=1),vsplit和hsplit也可以等量分割
不等量分割:np.array_split(a,3,axis=1)
a = np.arange(12).reshape((3,4)) print(a) print("====================") # 分割 # 每行分割成两个 # axis=1表示对水平进行操作 print(np.split(a,2,axis=1))
# 纵向分割成3块
print(np.split(a,3,axis=0))
# 不等量分割
# ValueError: array split does not result in an equal division # print(np.split(a,3,axis=1)) # 行的四个元素分成3个会出错 print(np.array_split(a,3,axis=1)) # 这样分成了 2 1 1
print(np.vsplit(a,3)) print(np.hsplit(a,2))
十、数组拷贝
numpy 中的 copy方法是 deep copy:b = np.copy(a)
a = np.arange(4) b = a print(a) print(b)
a[0] = 199 b[1:3] = [7,8] print(a) print(b) print(id(a)) print(id(b)) print(b is a)
# numpy 中的 copy方法是 deep copy
# 文档中说的非常详细 a = np.arange(4) # b = a.copy() b = np.copy(a) print(a) print(b) print(id(a)) print(id(b))
a[0] = 199 b[1:3] = [7,8] print(a) print(b)