利用python进行数据分析(二):Numpy数组
来源:互联网 发布:美工基础知识 编辑:程序博客网 时间:2024/05/17 23:40
使用前 import numpy as np
Numpy的重要特点是ndarray数组,里面存储的必须是同一种对象。 data.dtype
可以查看数组data里面元素的类型。 data.shape
可以查看数组data的大小。
(1)数组的创建
np.array(列表) 直接将列表转换为数组。
np.zeros(n) np.ones(n) 可以直接生成长度为n的一维全零数组。
np.zeros((m,n)) np.ones((m,n)) 可以直接生成(m,n)的二维全零或全一数组。高维数组的生成也是一样。
np.arange(15) 生成一维数组,数组里是0-14。
np.arange(15) Out[5]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
np.ones_like()、np.zeroslike()根据某一个数组的形状来创建新的数组。
(2)关于数组的类型
可以在建立数组的时候指定,也可以在传入后再修改(使用np内置的astype函数)。
s=array(['1.73', '4.5', '7.88'], dtype='np.string_')s=s.astype('np.float64')
(3)python对于数组、列表
当你创建一个对象,然后把它复制给另一个变量的时候,Python并没有拷贝这个对象,而是拷贝了这个对象的引用。
如果用C语言的角度,相当于只是将地址进行了传递,虽然两个变量名不一样,但是实际的地址却是一样的。
比如
>>> a=[1,4,5]>>> b=a>>> b[1, 4, 5]>>> a[2]=1>>> a[1, 4, 1]>>> b[1, 4, 1]
可以使用b=a.copy() 这样b就是a的副本,而不是指向同一个地址。就不会出现这种浅拷贝的情况。
需要注意的是
1)浅拷贝的现象只会出现在数组、列表等对象中,对int、float等单个元素不会出现。
2)如果不是改变部分分元素,而是直接赋给a一个新的列表,比如a=[3,4,5],那么b并不会跟着变化。
(4)标量与数组的运算是 这个标量与数组每个元素做运算
cOut[27]:array([5, 6, 7])In [28]:c+3Out[28]:array([ 8, 9, 10])
这种机制叫做广播,需要注意的是 只有数组才有这种属性,列表并没有。
(5)要调取一个数组(比如数组名为a,大小为2*2)的某一个元素,两种方式是等价的:
a[0][1]a[0,1]
(6)要找数组里所有的同一个元素,可以使用布尔型索引
data=array([‘Bob’,’Will’,’Sam’])
data[data==’Bob’]
data==’Bob’返回一个bool类型的数组。可以作为索引使用
data[data<0]=0
data中所有小于0的数全部置为0
(7)花式索引——利用整数型数组(整数列表)来作为索引
arr[[4,3,0,6]]
选择arr的第4,3,0,6四行组成新的数组。
(8)数组的转置属性和内积方法。
arr.T可以得到arr的转置矩阵
内积(np.dot)就是矩阵乘法。
np.dot(arr.T,arr)
多维矩阵的转置:
arr=np.arange(16).reshape((2,2,4))arr.transpose((1,0,2))
第0维和第1维转置,第二维不变。
(9)Numpy中的通用函数
np.arrange(n) #生成一维数组,数组里是0-n-1。np.random.randn()np.sqrt(arr) #对数组arr里的每个元素开方np.exp(arr) #对数组arr里的每个元素x 求exp(x)np.square() np.abs()np.random.randn(8) #产生长度为8服从标准正态分布的一维随机数数组np.random.randint(8) #产生0-8的一个随机整数'''
(10)利用数组做数据处理
np.meshgrid(x,y)
接收两个一维数组,并产生两个二维矩阵,对应两个数组中所有的(x,y)对
(11)矢量化运算
np.where()是 x if condition else y的矢量化版本,矢量化的运算要比循环更快。
result=np.where(cond,xarr,yarr)
cond,xarr,yarr,result是同等大小的数组。
cond里面元素为真(不为0)的时候result该位置的元素取xarr对应元素的值,否则取yarr对应元素的值。
第二个和第三个参数不一定是数组,也可以是标量。比如:
result=np.where(cond,2,3)
cond里面元素为真(不为0)的时候result该位置的元素取2,否则取3。
(12)数组的数学统计
对数组可以直接使用np.mean、np.sum、np.std(标准差)、np.var(方差)、np.max、np.min、np.argmax、np.argmin等函数,也可以作为数组的属性来使用。
cumsum()和cumprod()分别可以实现数组中元素的累加和累乘。
(13)布尔型数组的用法
对于bool型数组arr: arr.sum()可以统计True的个数。arr.all()检查是否全是True,arr.any()检查是否有True。
(14)数组的唯一化
np.unique(arr) #返回一个数组,数组中的元素是arr去除了重复元素的结果
(15)数组的文件输入和输出
np.save()和np.load()是读写磁盘数据的两个函数,save将数组保存在扩展名.npy的文件中,如果不写.npy的话,系统在存储的时候会自动添加。
np.save('some_array.npy',arr)arr_new=np.load('some_array.npy')
savez()可以同时保存多个数组到.npz文件中,读取时会得到一个类似于字典的对象,如果不写.npz的话,系统在存储的时候会自动添加。
savez('some_array',a=arr1,b=arr2)new_arr=np.load('some_array.npz')new_arr['b']
(16)线性代数
numpy.linalg 里面有很多用于矩阵的函数 ,如inv —–求逆 det—–求行列式
svd —–奇异值分解 qr —-计算qr分解
from numpy.linalg import inv,qr mat=X.T.dot(X) inv(mat) q,r=qr(mat)
(17)随机数生成
np.random.randn(8) #产生长度为8服从标准正态分布的一维随机数数组np.random.randint(8) #产生0-8的一个随机整数np.random.randn(8,8) #产生8*8服从标准正态分布的随机数数组
(18)连接两个数组
np.concatenate([arr1,arr2]) #默认axis=0np.concatenate([arr1,arr2],axis=1)
(19)Numpy的matrix类
Numpy提供了一个matrix类,直接使用×就是矩阵乘法,不需要再使用dot函数。
X是一个二维数组。
Xm=np.matrix(X) #转成矩阵ym=Xm[:,0] #取第一列ym.T*Xm*ym #做矩阵乘法,其中,.T是转置 。
Xm.I #求Xm的逆。
np.asnarray() #将matrix类转换回正规的ndarray
(20)数组删除行和列
data = np.delete(data, -1, axis=1) #删除最后一列data = np.delete(data, -1, axis=0) #删除最后一行
- 利用python进行数据分析(二):Numpy数组
- 《利用python进行数据分析》学习笔记(二)--NumPy(1)
- 利用python进行数据分析-NumPy基础
- 利用Python进行数据分析之Numpy
- 利用Python数据分析:Numpy基础(二)
- 利用Python进行数据分析(二)
- Numpy基础 --数组和矢量计算 利用Python进行数据分析读书笔记
- 《利用Python进行数据分析》笔记---第4章NumPy基础:数组和矢量计算
- 读书笔记:利用Python进行数据分析【第四章:NumPy基础-array数组】
- 利用python进行数据分析-NumPy基础2
- 利用python进行数据分析-NumPy高级应用
- 利用python进行数据分析学习笔记-Numpy篇
- 利用python进行数据分析学习笔记—Numpy基础知识
- 利用Python进行数据分析笔记-第四章Numpy
- 《利用Python进行数据分析》第四章-numpy基础
- 《利用python进行数据分析》学习笔记(二)4.3 通用函数 4.4 利用数组进行数据处理
- 利用Python进行数据分析(1)—— Numpy Basic(1)
- 利用Python进行数据分析(2)—— Numpy Basic(2)
- java socket 实际端口为什么不是自定的端口
- 卷积神经网络LeNet5结构
- Unique Paths II
- Eureka 提供方 demo
- leetcode70- Climbing Stairs
- 利用python进行数据分析(二):Numpy数组
- C#概念理解-收集
- servlet乱码问题详解
- AC自动机
- JAVAWEB第一天css篇
- 学生信息管理系统7
- flask-login用户加载流程,user_callback,token_callback,request_callback,header_call_back相关问题
- BZOJ1412 [ZJOI2009]狼和羊的故事 最小割
- Python 循环语句和条件语句