NumPy学习笔记
来源:互联网 发布:excel怎么建立数据库 编辑:程序博客网 时间:2024/06/05 19:37
ones函数
>>> import numpy as np>>> a=np.ones(3);aarray([ 1., 1., 1.])>>> b=np.ones((3,2));barray([[ 1., 1.], [ 1., 1.], [ 1., 1.]])
zeros函数
>>> c=np.zeros(3)>>> carray([ 0., 0., 0.])>>> d=np.zeros((2,3));d array([[ 0., 0., 0.], [ 0., 0., 0.]]) #d=np.zeros(2,3)会报错,d=np.zeros(3,dtype=int)来改变默认的数据类型
eye&identity函数
>>> e=np.eye(3);earray([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])>>> e=np.eye(3,2);earray([[ 1., 0.], [ 0., 1.], [ 0., 0.]])>>> e=np.eye(3,1);earray([[ 1.], [ 0.], [ 0.]])>>> e=np.eye(3,3);earray([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])>>> e=np.eye(3,3,1);earray([[ 0., 1., 0.], [ 0., 0., 1.], [ 0., 0., 0.]])e=np.eye(3,3,2);earray([[ 0., 0., 1.], [ 0., 0., 0.], [ 0., 0., 0.]])>>> e=np.eye(3,3,3);earray([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]])>>> e=np.eye(3,3,4);earray([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]])>>> p=np.identity(4);parray([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]])>>> p=np.identity(4,3);p #会报错>>> p=np.identity((4,3));p #会报错
empty函数
>>> a=np.empty(3);aarray([ 1.60091154e-163, 1.12069303e-258, 3.23790862e-318])>>> a=np.empty((3,3));aarray([[ 1.57741456e-284, 1.57680914e-284, 1.56735002e-163], [ 1.56205068e-163, 1.62511438e-163, 1.21880041e+171], [ 1.57757869e-052, 7.34292780e+223, 4.71235856e+257]])
ones_like,zeros_like,empty_like函数
>>> a=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]])>>> a.shape(3, 2, 2)>>> b=np.ones_like(a)>>> barray([[[1, 1], [1, 1]], [[1, 1], [1, 1]], [[1, 1], [1, 1]]])>>> b=np.zeros_like(a);barray([[[0, 0], [0, 0]], [[0, 0], [0, 0]], [[0, 0], [0, 0]]])>>> a=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]])>>> b=np.empty_like(a);barray([[[39125057, 40012256], [81313824, 81313856]], [[ 0, 0], [ 0, 0]], [[ 0, 0], [ 0, 0]]])#注意,shape和dtype均复制
关于astype转换数据类型
>>> b=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]])>>> b.dtypedtype('int32')>>> c=b.astype(float) #also c=b.astype(np.float64)>>> c.dtypedtype('float64')#float转int会将小数部分去掉>>> a=np.array([1.7,-2.9])>>> b=a.astype(int)>>> barray([ 1, -2])#如果字符串组表示的全部是数字,astype可以将其转为数值形式>>> a=np.array(['23','0.32','-0.9'])>>> a.dtypedtype('S4')>>> a=np.array(['23','0.32','-0.9'],dtype=np.string_)>>> a.dtypedtype('S4')>>> c=a.astype(float);carray([ 23. , 0.32, -0.9 ])
Ndarray切片视图而非副本特性
>>> a=np.arange(10)>>> b=a[5:8];b #仅仅是取了一个a数组的视图,b相当于a的一个子集array([5, 6, 7])>>> b[1]=1234;aarray([ 0, 1, 2, 3, 4, 5, 1234, 7, 8, 9])>>> b[2]=77;aarray([ 0, 1, 2, 3, 4, 5, 1234, 77, 8, 9])>>> b[0]=90;aarray([ 0, 1, 2, 3, 4, 90, 1234, 77, 8, 9])>>> b[:]=64;aarray([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])>>> barray([64, 64, 64])>>> b=90 #注意使b中三个元素均变为90的操作是b[:]=90,而不是b=90>>> b90>>> aarray([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])#可以用a.copy()函数避免这个问题,新建一个副本>>> a=np.arange(10)>>> b=a[5:8].copy()>>> barray([5, 6, 7])>>> b[:]=64;aarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> barray([64, 64, 64])
花式索引与切片表达上的一个区分
>>> a=np.arange(1,13,1).reshape((2,2,3))>>> aarray([[[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]])>>> a[1][0]array([7, 8, 9])>>> a[1,0] #切片array([7, 8, 9])#a[1][0]与a[1,0]效果相同>>> a[[1,0]] #花式索引array([[[ 7, 8, 9], [10, 11, 12]], [[ 1, 2, 3], [ 4, 5, 6]]])>>> a[[1,0,1]] #花式索引array([[[ 7, 8, 9], [10, 11, 12]], [[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]])
关于:的使用
>>> a=np.arange(24).reshape(6,2,2)>>> aarray([[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]], [[ 8, 9], [10, 11]], [[12, 13], [14, 15]], [[16, 17], [18, 19]], [[20, 21], [22, 23]]])>>> a[[0,2,4,3,5,1]] #对列进行花式索引array([[[ 0, 1], [ 2, 3]], [[ 8, 9], [10, 11]], [[16, 17], [18, 19]], [[12, 13], [14, 15]], [[20, 21], [22, 23]], [[ 4, 5], [ 6, 7]]])>>> a[:,[1,0]] #对行进行花式索引array([[[ 2, 3], [ 0, 1]], [[ 6, 7], [ 4, 5]], [[10, 11], [ 8, 9]], [[14, 15], [12, 13]], [[18, 19], [16, 17]], [[22, 23], [20, 21]]])>>> a[:,1] #选取第二行array([[ 2, 3], [ 6, 7], [10, 11], [14, 15], [18, 19], [22, 23]])>>> a[1] #选取第二列array([[4, 5], [6, 7]])>>> a[:,1][1] #选取第二行后再选第二列array([6, 7])>>> a[:,1][:,1]array([ 3, 7, 11, 15, 19, 23])
花式索引补充(花式索引是将数据复制到新数组中)
>>> import numpy as np>>> a=np.arange(32).reshape((8,4))>>> aarray([[ 0, 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]])>>> a[[4,3,0,6]]array([[16, 17, 18, 19], [12, 13, 14, 15], [ 0, 1, 2, 3], [24, 25, 26, 27]])>>> a[[-2]]array([[24, 25, 26, 27]])>>> a[[-3,-5,-7]] #注意排序中2和-2的差别,2代表第三,-2代表倒数第二array([[20, 21, 22, 23], [12, 13, 14, 15], [ 4, 5, 6, 7]])>>> a[[2,1,6,3],[0,2,3,1]] #取第三列的第一个排在第一位……array([ 8, 6, 27, 13])>>> a[[2,1,6,3]][:,[0,3,1,2]] #先取a[[2,1,6,3]],再对其进行列(行)排列array([[ 8, 11, 9, 10], [ 4, 7, 5, 6], [24, 27, 25, 26], [12, 15, 13, 14]])
Transpose&swapaxes(数组轴对换)
>>> import numpy as np>>> a=np.arange(16).reshape((2,2,4))>>> aarray([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]])>>> a.transpose()array([[[ 0, 8], [ 4, 12]], [[ 1, 9], [ 5, 13]], [[ 2, 10], [ 6, 14]], [[ 3, 11], [ 7, 15]]])>>> a.transpose((1,0,2)) #怎么来的并没有搞清楚array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])>>> a.swapaxes(1,2) #怎么来的并没有搞清楚array([[[ 0, 4], [ 1, 5], [ 2, 6], [ 3, 7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]])
元素级数组元素
一元ufunc
二元ufunc
在一组值(网格型)上计算函数sqrt(x^2+y^2 )
>>> import numpy as np>>> import matplotlib.pyplot as plt>>> a=np.arange(-5,5,0.01)>>> xs,ys=np.meshgrid(a,a) #np.meshgrid函数接受两个一位数组,并产生一个二维矩阵>>> ysarray([[-5. , -5. , -5. , ..., -5. , -5. , -5. ], [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99], [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98], ..., [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97], [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98], [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])>>> z=np.sqrt(xs**2+ys**2)>>> zarray([[ 7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985, 7.06400028], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], ..., [ 7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603, 7.04279774], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568]])>>> plt.imshow(z,cmap=plt.cm.gray);plt.colorbar();plt.title("Image plot of $\sqrt{x^2+y^2}$ for a grid of values")
结果 :imshow将z(二维数组)显示为灰度图,plt.colorbar绘制了右侧颜色栏
将条件逻辑表述为数组运算
numpy.where是三元表达式 x if condition else y的矢量化版本,举例进行比较
>>> import numpy as np>>> x=np.array([1.1,1.2,1.3,1.4,1.5])>>> y=np.array([2.1,2.2,2.3,2.4,2.5])>>> q=np.array([True,False,True,True,False])>>> result=[(x if c else y) #if有两个问题1、计算速度慢2、无法用于多维数组... for x,y,c in zip(x,y,q)] >>> result[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]>>> result=np.where(q,x,y);resultarray([ 1.1, 2.2, 1.3, 1.4, 2.5])#在数据工作中,where通常根据一个数组产生一个新数组
any,all函数
>>> import numpy as np>>> b=np.array([False,False,True,False])>>> b.any()True>>> b.all()
any用于测试数组中是否存在一个或多个True,all检测数组中是否都是True
非布尔型数组中也可以用,非0元素都是True
求5%分位数
>>> a=np.random.randn(1000)>>> a.sort() #这一步执行后数组a中的元素以及排好序了,不能写成b=a.sort(),这里b是空值>>> a[int(0.05*len(a))] -1.6949758821658074
数组集合运算
>>> a=np.array([1,1,2,9,3,5])>>> np.unique(a) #a.unique()是错误表达方式 计算唯一元素,并且返回有序结果array([1, 2, 3, 5, 9])>>> set(a) #变成集合形式 并且返回有序结果set([1, 2, 3, 5, 9])>>> sorted(set(a)) #纯Python代码[1, 2, 3, 5, 9]>>> a=np.array([6,0,0,3,2,5,6])>>> b=np.array([2,3,6])>>> np.in1d(a,b) #a是否包含于barray([ True, False, False, True, True, False, True], dtype=bool)>>> np.intersect1d(a,b) #交集,并返回有序结果array([2, 3, 6])>>> np.union1d(a,b) #并集,并返回有序结果array([0, 2, 3, 5, 6])>>> np.setdiff1d(a,b) #集合的差array([0, 5])
数据存储读取
我的文件储存目录:
C:\Users\Administrator\Documents
>>> import numpy as np>>> a=np.arange(24).reshape((2,2,6))>>> aarray([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]])>>> np.save('AABBCC',a)
>>> import numpy as np>>> np.load('AABBCC.npy')array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]])>>> a=array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]])>>> b=np.arange(9)>>> c=np.array(['b','a'])>>> np.savez('abc.npz',q=a,w=b,e=c)>>> p=np.load('abc.npz')>>> p<numpy.lib.npyio.NpzFile object at 0x06063830>>>> p['e']array(['b', 'a'], dtype='|S1')>>> p['q']array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]])
‘BBAACC.txt’文件如图,将它放在默认路径中
>>> import numpy as np>>> a=np.loadtxt('BBAACC.txt',delimiter=',')>>> aarray([[ 866052., 300238.], [ 866052., 304753.], [ 866052., 300322.], [ 866052., 300539.], [ 866052., 305271.], [ 866052., 306853.], [ 866052., 307567.], [ 866052., 301155.], [ 866052., 300420.], [ 866052., 302583.], [ 866052., 300791.], [ 866052., 300448.], [ 866052., 300014.], [ 866052., 309366.], [ 866052., 323919.], [ 866052., 300126.], [ 866052., 308855.], [ 866052., 303444.]])
numpy.linalg模块
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西,与MATLAB和R所使用的是相同的行业标准库。
0 0
- NumPy学习笔记(1)
- NumPy学习笔记 (2)
- NumPy学习笔记 (3)
- NumPy学习笔记 (4)
- NumPy学习笔记
- numpy学习笔记
- NumPy学习笔记
- NumPY学习笔记
- 【python】numpy学习笔记
- Numpy 学习笔记一
- NumPy学习笔记1
- NumPy学习笔记2
- NumPy学习笔记
- NumPy学习笔记
- [NumPy]入门-学习笔记
- numpy学习笔记
- numpy入门学习笔记
- NumPy学习笔记
- <LeetCode OJ> 387. First Unique Character in a String
- Graphviz样例之有向图
- 面试总结(static、const、define)
- Freeline - Android平台上的秒级编译方案
- Android5.0以上版本ActiveAndroid报ClassNotFoundException错误
- NumPy学习笔记
- UIView之动画效果的实现方法(合集)
- android捕获back键
- 自己写bootloader笔记6---boot.c分析(u-boot向内核传递参数及跳转到内核)
- 61-11
- 130. Surrounded Regions
- Android TV Input Framework(TIF)--1 概述
- [Codeforces 27D] Ring Road 2 (二分图染色)
- Android异步回调中的UI同步性问题