欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

01numpy学习笔记整理

程序员文章站 2024-01-19 19:19:28
...
#1.创建ndarray数组
import numpy as np 
data=[[1,2,3],[4,5,6]]
arr1=np.array(data)
print(arr1.shape)
print(arr1.dtype)
(2, 3)
int32
#2.创建ndarray数组其他的方法(zeros,empty,ones,arange)
arr1=np.zeros((3,6))
print(arr1)
arr2=np.empty((3,2))
print(arr2)
arr3=np.arange(10)
print(arr3)
[[ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]
[[  7.87847941e-315   7.87848185e-315]
 [  7.87769522e-315   3.91938443e-316]
 [  3.95820534e-316   3.95823024e-316]]
[0 1 2 3 4 5 6 7 8 9]
#3.指定ndarray数据类型(其实就是基于dtype属性,进行明确的定义)P86
arr=np.array([1,2,3],dtype=np.float64)
#4.显式转换数据类型
arr1=arr.astype(np.float64)
#5.矢量化:代销相等的数组之间的任何算术运算都将会将运算运用到元素级
arr1=np.array([[1,2,3],[4,5,6]])
arr2=np.array([[1,3,5],[2,4,6]])
print(arr1-arr2)
print(arr1*arr2)
print(1/arr1)
print(arr1**2)
[[ 0 -1 -2]
 [ 2  1  0]]
[[ 1  6 15]
 [ 8 20 36]]
[[ 1.          0.5         0.33333333]
 [ 0.25        0.2         0.16666667]]
[[ 1  4  9]
 [16 25 36]]
#6.基本的索引和切片,关注切片是原始数组的“视图”而非拷贝,因此直接对切片修改会改动原数组
arr=np.array([1,2,3,4,5])
print(arr[3])
arr[2:4]=12
print(arr)
4
[ 1  2 12 12  5]
#7.布尔型索引(其实就是0/1基于所在位置进行的索引)
name=np.array(["bob","joe","kitty","john"])
data=np.random.randn(4,4)
print(data)
data1=data[name=="joe"]
print(data1)
data1[data1<0]=0#很好的批处理方法!
print(data1)
[[-1.04725263  1.25324549 -1.36186917 -1.22608039]
 [-0.99111914 -0.42502115 -0.10998458  1.14502491]
 [-0.09662722  1.46319233  0.54577043  1.08601567]
 [ 0.41236581  1.00661673 -1.03851195  0.84669917]]
[[-0.99111914 -0.42502115 -0.10998458  1.14502491]]
[[ 0.          0.          0.          1.14502491]]
#8.花式索引(指的是利用整数数组进行索引),当然也可以用负数进行索引
arr=np.empty((4,4))
for i in range(4):
    arr[i]=i
print(arr)
arr1=arr[[1,2,3]]
print(arr1)
arr2=arr[[1,2],[2,3]]#基于横纵坐标的精确索引
print(arr2)
[[ 0.  0.  0.  0.]
 [ 1.  1.  1.  1.]
 [ 2.  2.  2.  2.]
 [ 3.  3.  3.  3.]]
[[ 1.  1.  1.  1.]
 [ 2.  2.  2.  2.]
 [ 3.  3.  3.  3.]]
[ 1.  2.]
#9.数组的转置和转换
arr=np.array([[1,2,3],[4,5,6]])
print(arr)
arr1=arr.T
print(arr1)
#计算矩阵内积
arr2=np.dot(arr.T,arr)
print(arr2)
[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]
[[17 22 27]
 [22 29 36]
 [27 36 45]]
#10.通用函数:快速的元素级数组函数
#一元func:abs,sqrt,square,exp,log,sign,cell,floor,rint,modf,cos,sin,tan等
#二元func:add,subtract,multiply,divide,power,maximum,minimum,mod等
#11.利用数组进行数据处理
arr1=np.arange(-2,2,0.1)
arrx,arry=np.meshgrid(arr1,arr1)
z=np.sqrt(arrx**2+arry**2)
print(z)
[[ 2.82842712  2.75862284  2.69072481 ...,  2.62488095  2.69072481
   2.75862284]
 [ 2.75862284  2.68700577  2.61725047 ...,  2.54950976  2.61725047
   2.68700577]
 [ 2.69072481  2.61725047  2.54558441 ...,  2.47588368  2.54558441
   2.61725047]
 ..., 
 [ 2.62488095  2.54950976  2.47588368 ...,  2.40416306  2.47588368
   2.54950976]
 [ 2.69072481  2.61725047  2.54558441 ...,  2.47588368  2.54558441
   2.61725047]
 [ 2.75862284  2.68700577  2.61725047 ...,  2.54950976  2.61725047
   2.68700577]]
#12.常用的数学和统计方法(sum,std,mean,max,min,argmin,argmax,cumsum,cumprod)
arr=np.random.randn(5,4)
arr.mean()
arr.sum()
-5.551015770041638
#13.用于布尔型数组的方法
arr=np.random.randn(100)
print((arr>0).sum())
#any用于测试数组中是否存在一个或者多个True
#all用于检测数组中所有值是否都是True
bools=np.array([True,False,False,False])
print(bools.any())
print(bools.all())
52
True
False
#14.其他方法(排序和唯一化)
#排序
arr=np.random.randn(10)
print(arr)
arr.sort()
print(arr)
#唯一化
names=np.array(['hello','tom','joe','hello','tom'])
name_un=np.unique(names)
print(name_un)
[ 0.25421376 -0.38828909 -1.50038819  1.10056855  0.18794147  0.49108345
 -0.69194139 -0.41112516  1.38519278  0.27180852]
[-1.50038819 -0.69194139 -0.41112516 -0.38828909  0.18794147  0.25421376
  0.27180852  0.49108345  1.10056855  1.38519278]
['hello' 'joe' 'tom']
#15.用于数组的文件输入输出
#np.save('文件名',数组名)
#np.load('文件名')
#文本文件的载入:np.loadtxt
#16.线性代数运算(在np.linalg中有一组标准的矩阵运算函数)
#diag,dot,trace,det,eig,inv,pinv,qr,svd,solve,lstsq
from numpy.linalg import inv,qr
x=np.random.randn(5,5)
print(x)
mat=x.T.dot(x)
print(mat)
inv(mat)
q,r=qr(mat)
print(q)
[[ 0.87985862  0.54117542  1.69821725  0.61023364 -1.17961437]
 [-0.07470329 -1.55220329 -0.82470084  1.80848588 -0.45377477]
 [ 1.50866418 -0.3881302  -0.79675966  0.74068995 -0.61822733]
 [-0.5387344   0.09261887 -2.15655703 -1.55449794 -0.66840357]
 [-0.77734655  1.30503828  0.27238962 -0.6068922  -0.37929182]]
[[ 3.95030179 -1.05780955  1.30382652  2.82849894 -1.28175965]
 [-1.05780955  4.56455409  2.66412428 -3.70037181 -0.25097205]
 [ 1.30382652  2.66412428  8.92383359  2.14174992  0.20170081]
 [ 2.82849894 -3.70037181  2.14174992  6.97640985 -0.72917919]
 [-1.28175965 -0.25097205  0.20170081 -0.72917919  2.57023225]]
[[-0.74564366 -0.1968808   0.44826316  0.41426479  0.18082674]
 [ 0.19966803 -0.68098193  0.1601137  -0.38531215  0.56770982]
 [-0.24610524 -0.58137677 -0.69455254  0.1646278  -0.30319584]
 [-0.5338965   0.3633757  -0.40664498 -0.51729187  0.38724877]
 [ 0.24193998  0.16571276 -0.35448607  0.6206658   0.63491568]]
#17.随机数的生成(numpy.random模块)
#常见函数:seed。permutation,shuffle,rand,randint,randn,binomial,normal。beta,chisquare,gamma,uniform
#随机漫步示例:
import random
position=0
walk=[position]
steps=1000
for i in range(steps):
    step=1 if random.randint(0,1) else -1
    position+=step
    walk.append(position)