目 录
1.创建ndarray数组
2.创建ndarray数组其他的方法(zeros,empty,ones,arange)
3.指定ndarray数据类型(其实就是基于dtype属性,进行明确的定义)P86
4.显式地转换数据类型(astype)
5.矢量化:尺寸相等的数组之间的任何算术运算都将会将运算运用到元素级
6.基本的索引和切片,关注切片是原始数组的“视图”而非拷贝,因此直接对切片修改会改动原数组
7.布尔型索引(其实就是0/1基于所在位置进行的索引)
8.花式索引(指的是利用整数数组进行索引),当然也可以用负数进行索引
9.数组的转置和转换
10.通用函数:快速的元素级数组函数
11.利用数组进行数据处理
12.常用的数学和统计方法(sum,std,mean,max,min,argmin,argmax,cumsum,cumprod)
13.用于布尔型数组的方法
14.其他方法(排序和唯一化)
15.用于数组的文件输入输出
16.线性代数运算(在np.linalg中有一组标准的矩阵运算函数)
17.随机数的生成(numpy.random模块)
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.显式地转换数据类型(astype)
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())
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.用于数组的文件输入输出
16.线性代数运算(在np.linalg中有一组标准的矩阵运算函数)
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)