python基本语法&numpy

文章目录

  • 一、python基础
    • 1.range
    • 2.深拷贝和浅拷贝
    • 3.格式化输出
    • 4.绘图
  • 二、NumPy
    • 1.NumPy数组创建
    • 2.Numpy数组查看
    • 3.NumPy数据保存
    • 4.NumPy数据类型
    • 5.Numpy数组运算
    • 6.切片和索引

一、python基础

1.range

a=range(5) 
a#range(0,5)
len(a)#5
for x in a:
	print(x,end=" ")#0 1 2 3 4
for  i in range(3,6):
	print(i,end=" ")#-8 -6 -4
range(2.2)#Error
b=range(1,10)
b[0]
b[:-3]#range(1,7)
b[0]=2#Error
for i in zip(range(1,6,2),range(2,7,2)):
	print(i,end="")#(1,2)(3,4)(5,6)

2.深拷贝和浅拷贝

1.复制操作原理
'='赋值是浅拷贝的一种

#情况一:
a=[1,4,7]
b=a
a=[2,3,5]
print(b)
#情况二:
a=[1,4,7]
b=a
a[0],a[1],a[2]=4,5,6
print('b is :'b)
#结果:[1,4,7][4,5,6]

2.copy()
copy也是属于浅拷贝的一种,但是在复制的过程中存在两种情况:
第一种:当复制的对象中无复杂子对象的时候。是深拷贝,原来值的id和浅拷贝值的id不一致
第二种:当复制的对象中存在复杂子对象的时候。如果改变其中复杂子对象的值,浅复制的值也会改变。改变其他值,则不会影响复制的值。

a=[[1,2],[1,4]]
b=copy.copy(a)
#改变复杂子对象的值
a[0][0]=0
print(a)
print(b)
#改变非复杂子对象的值
a[2]=0
print(a)
print(b)
#[[0,2],1,4] [[0,2],1,4] [[0,2],1,0] [[0,2],1,4]

3.deepcopy()
深拷贝

from copy import deepcopy
a=[1,2,3,4]
b=deepcopy(a)
a[0]=2
print(a)
print(b)
#[2,2,3,4]
#[1,2,3,4]

3.格式化输出

一、通过%实现
‘Hello,%s’%‘world’ #只有一个%,括号可以省略
‘Hi,%s,you have $%d.’%(‘Michael’,1000000)

#常见的占位符:%d,%f,%s,%x(十六进制整数)
#修饰符:- 表示左对齐,.表示小数点后位数, 0表示左边补零
print(‘%-2d-%02d’%(3,1))
print(‘%.2f’%3.1415926)
#%s可以将任何数据转换为字符串
‘Age:%s.Gender:%s’%(25,True)
%%表示字符%

二、format()方式格式化输出
#用传入的参数依次替换字符串内的占位符{0}、{1}…
print(‘Hello,{0},成绩提升了{1:.1f}%’.format(‘小明’,17.125))

4.绘图

1.绘制2D图像

plt.plot(epochs,costs)
plt.ylabel('Cost')
plt.xlabel('Epoch')
plt.show()

2.绘制3D图像

import numpy as np
import matplotlib.pyplot as plt
from  matplotlib import  cm
from mpl_toolkits.mplot3d import  Axes3D
#from...import表示可以从库里面引用我需要的函数就可以,当然也可以全部引入
#import表示直接把库里面的所有东西都引入

x_data=[1.0,2.0,3.0]
y_data=[2.0,4.0,6.0]

def forward(x):
    return x*w+b

def loss(x,y):
    y_pred=forward(x)
    return (y-y_pred)*(y-y_pred)

w_list=np.arange(0.0,4.1,0.1)
b_list=np.arange(-2.0,2.1,0.1)
mse_list=[]
ww,bb=np.meshgrid(w_list,b_list)

for w in w_list:
    for b in b_list:
        print('w={0},b={1}'.format(w,b))
        l_sum=0
        for x_val,y_val in zip(x_data,y_data):
            y_pred_val=forward(x_val)
            loss_val=loss(x_val,y_val)
            l_sum+=loss_val
            print('\t',x_val,y_val,y_pred_val,loss_val)
        print('MSE=',l_sum/3)
        mse_list.append(l_sum/3)
mse=np.array(mse_list).reshape(w_list.shape[0],b_list.shape[0])

fig=plt.figure()
ax=Axes3D(fig)
plt.ylabel('b')
plt.xlabel('w')
ax.plot_surface(w_list,b_list,mse,rstride = 1, cstride = 1, cmap = cm.coolwarm)#rstride:行之间的跨度  cstride:列之间的跨度
#改变cmap参数可以控制三维曲面的颜色组合, 一般我们见到的三维曲面就是 rainbow 的
plt.show()

二、NumPy

1.NumPy数组创建

arr=np.array([2,4,5],dtype=np.int32)
np.ones(shape=10)#10个1
np.zeros(shape=5)#5个0
np.full(shape=6,fill_value=666) #6个666
np.random.randint(0,100,size=10)#在0~100中随机生成10个数
np.random.rann(10)#生成10个正态分布,平均值是0,标准差是1
np.linspace(1,100,100)#把1~100等分成100份(等差数列)
np.linspace(1,99,50)#array([1.,3.,.....99.])
np.logspace(0,10,base=2,num=11)#从2^0到2^10分成11份

#我们发现这个logspace的运行结果我看不懂,这是因为它是用科学计数法表达的,我们可以使用#np.set_printoptions*suppress=True)来让运行结果变成我们能看懂的数字:
np.set_printoptions(suppress=True)
np.logspace(0,10,base=2,num=11)

np.random.randint(0,10,size=(3,5))#二维数组:3行5列
np.random.randint(0,10,size=(2,3,5))#三维数组

2.Numpy数组查看

arr=np.random.random(size=(3,5))#生成一个3行5列的随机数
arr.ndim#维度 2
arr.shape#形状 (3,5)
arr.size#数组元素的总数 15
arr.dtype#数据类型 dtype('float64')
arr.itemsize#每个元素的大小,对应8个字节 8

3.NumPy数据保存

arr=np.arange(0,10,3)
np.save('./datal',arr)#保存
np.load('/datal.npy')#array([0,3,6,9])


#如果我们要把多个数组存入一个文件,可以使用savez方法:
arr=np.arrange(0,10,3)
np.set_printoptions(suppress=True)
arr2=np.logspace(0,10,base=2,num=11)
np.savez('./data2.npz',x=arr,y=arr2)
np.load('./data2.npz')['x']#array([0,3,6,9])
np.load('./data2.npz')['y']#array([1.,2.,4.,8,....1024.])


#读写csv、txt文件:
arr=np.random.randint(0,10,size-(3,4))
np.savetxt("./arr.csv",arr,delimiter=',')
np.loadtxt('./arr.csv',delimiter=',',dtype=np.int32)

4.NumPy数据类型

我们的数据类型包含三大类:
int:int8、uint8、int32、int64
float:float16、float32、float64
str

5.Numpy数组运算

1.加减乘除幂运算

nd=np.random.randint(0,10,size=(5,3))
nd+5#元算全部+5
nd**2#元素全部变成原数的平方
np.power(nd,3)#元素变为原数的三次方
nd/2
nd%2

2.逻辑运算

nd>5
nd==5
arr1>arr2
arr1==arr2
#全为true or false

3.+= -= *=操作

nd+=10
nd-=3
nd*=2
#nd/=3 #会报错,这里为//=
nd//=3

6.切片和索引

和pytorch类似,略

你可能感兴趣的:(Pytorch,numpy,python,开发语言)