python-numpy基础用法
import numpy as np
tang_list = [1,2,3,4,'5']
tang_arry = np.array(tang_list)
//数组的维度
tang_arry.shape
//数组中每一个元素分别所占空间的大小
tang_arry.itemsize
//填充
tang_arry.fill(0)
//nd array所有元素都得是同一类型 不是就向下转换
//索引与切片
tang_array[1:3]
tang_array[-2:]
//多维矩阵
tang_array = np.array([[1,2,3],[4,5,6],[7,8,9]])
tang_array.shape
//(3,3)
//几维
tang_array.ndim
//2
//取值索引 先行后列
tang_array[1,1]
//5
//取行
tang_array[1]
//[4,10,6]
//取列
tang_array[:,1]
//该值
tang_array[1,1] = 100
tang_array2 = tang_array
//操作2 初始数据也会受改变 因为赋值指向同一个内存地址
//想要复制一个新的数组 用copy
tang_array2 = tang_array.copy()
//构造等差数组
tang_array = np.arrange(0,100,10)
[0,10,20,30,40,50,60,70,80,90]
mask = np.array([0,0,0,1,1,1,0,0,1,1],dtype=bool)
tang_array[mask]
[30,40,50,80,90]
//随机数
random_array = np.random.rand(10)
//返回符合条件的索引值
np.where(tang_array > 30)
[3,4]
tang_array[np.where(tang_array > 30)]
//指定object类型
tang_array = np.array([1,10,3.5,'str'],dtype = np.object)
[1,10,3.5,'str']
//转换数据类型
tang_array = np.asarray(tang_array,dtype = np.float32)
tang_array = tang_array.astype(np.float32)
//求总和
np.sum(tang_array)
tang_array = np.array([[1,2,3],[4,5,6],[7,8,9]])
//纵相加
np.sum(tang_array,axis = 0)
[5,7,9]
np.sun(tang_array,axis = 1)
[6,15]
//乘积 也可以指定轴 axis = 1 or 0
tang_array.prod()
//最小值 最大值
tang_array.min()
tang_array.max()
//最小值位置 最大值位置
tang_array.argmin()
tang_array.argmax()
//平均值
tang_array.mean()
//3.5
//标准差
tang_array.std()
//方差
tang_array.var()
//限制 小于2变2 大于4变4
tang_array.clip(2,4)
//四舍五入
tang_array.round()
//排序 可以加轴来更换排序规则
np.sort(tang_array)
//返回排序后会变的索引值
np.argsort(tang_array)
//0,10之间构建十个数
np.linspace(0,10,10)
//插入数组
values = np.array([2.5,6.5,9.5])
np.searchsorted(tang_array,values)
//第三列升序,第一列降序
index = np.lexsort([-1*tang_array[:,0],tang_array[:,2]])
//重新定义维度
tang_array.shape = 2,5
tang_array.reshape(1,10)
//压缩数组
tang_array = tang_array.squeeze()
//转置
tang_array.T
//两个数组并一起
a = np.array([[123,456,678],[214,456.124]])
b = np.array([[13,581,872],[20,45.142]])
c = np.concatenate((a,b))
//拼接完变成4*3的数组 默认按行拼组 列拼则2*6
//简易写法
np.vstack((a,b))
np.hstack((a,b)) // np.concatenate((a,b),axis = 1)
//拉平 变成一维数组了
a.flatten()
a.ravel()
//零数组
np.zeros((3,3))
np.zeros_like(tang_array)
//都变1
np.ones_like(tang_array)
//乘法 对应位置相乘
np.multiply(x,y)
//维度不同不能相乘
np.dot(x,y)
//随机整数
np.random.randint(10,size = (5,4))
//0-10取三个数
np.random.randint(0,10,3)
//洗牌 打乱顺序
np.random.shuffle(tang_array)
//随机种子 可以保证下次随机数不变
np.random.seed(0)
np.random.normal(0,0.1,10)
文件操作
//读取文件操作
data=[]
with open('tang.txt') as f:
for line in f:
fileds = line.split()
cur_data = [float(x) for x in fileds]
data.append(cur_data)
data = np.array(data)
//假如数据较为规整 参数指定分隔符 跳过第几行
data = np.loadtxt('tang.txt',delimiter = ',',skiprows = 1)
//保存数据 以整数形式 间隔
np.savetxt('tang4.txt',tang_array,fmt='%d',delimiter=',')
//读取
np.save('tang_array.npy',tang_array)
tang = np.load('tang_array.npy')
tang_array2 = np.arange(10)
np.save('tang.npz',a=tang_array,b=tang_array2)
//会存入两个数组 解压后是两个npy
data = np.load('tang.npz')
data.keys()
// ['b','a']
data['a']
[1,2,3],[4,5,6]
练习题
import numpy as np
print ( np. __version__)
zero = np. zeros( ( 2 , 5 ) , dtype= int )
print ( zero. size* zero. itemsize)
print ( help ( np. info( np. add) ) )
tang_array = np. arange( 10 , 50 , 1 )
tang_array = tang_array[ : : - 1 ]
print ( tang_array)
print ( np. nonzero( [ 0 , 0 , 5 , 0 , 1 , 3 , 4 ] ) )
tang_array = np. random. random( ( 3 , 3 ) )
print ( np. min ( tang_array) )
print ( np. max ( tang_array) )
tang_array = np. ones( ( 5 , 5 ) )
tang_array = np. pad( tang_array, pad_width= 1 , constant_values= 0 , mode= 'constant' )
print ( tang_array)
print ( np. unravel_index( 100 , ( 6 , 7 , 8 ) ) )
tang_array = np. random. random( ( 5 , 5 ) )
tang_max = tang_array. max ( )
tang_min = tang_array. min ( )
tang_array = ( tang_array- tang_min) / ( tang_max- tang_min)
print ( tang_array)
z1 = np. random. randint( 0 , 10 , 10 )
z2 = np. random. randint( 0 , 10 , 10 )
print ( np. intersect1d( z1, z2) )
today = np. datetime64( 'today' , 'D' )
temorrow = np. datetime64( 'today' , 'D' ) + np. timedelta64( 1 , 'D' )
yesterday = np. datetime64( 'today' , 'D' ) - np. timedelta64( 1 , 'D' )
print ( today, temorrow, yesterday)
np. arange( '2023-6' , '2023-7' , dtype= 'dataetime64[D]' )
z = np. random. uniform( 0 , 10 , 10 )
print ( np. floor( z) )
z = np. zeros( 5 )
z. flags. writeable = False
np. set_printoptions( threshold= 5 )
np. set_printoptions( threshold= np. nan)
z = np. zeros( ( 15 , 15 ) )
print ( z)
z = np. arange( 100 )
v = np. random. uniform( 0 , 100 )
print ( v)
index = ( np. abs ( z- v) . argmin( ) )
print ( z[ index] )
z = np. arange( 10 , dtype= np. int32)
print ( z. dtype)
z = z. astype( np. float32)
print ( z. dtype)
z = np. arange( 9 ) . reshape( 3 , 3 )
for index, value in np. ndenumerate( z) :
print ( index, value)
z = np. array( [ 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 5 , 8 ] )
np. bincount( z)
z = np. random. randint( 0 , 10 , ( 4 , 4 , 4 , 4 ) )
res = z. sum ( axis= ( - 2 , - 1 ) )
print ( res)
z = np. arange( 25 ) . reshape( 5 , 5 )
print ( z)
z[ [ 0 , 1 ] ] = z[ [ 1 , 0 ] ]
print ( z)
z = np. random. randint( 0 , 10 , 50 )
print ( np. bincount( z) . argmax( ) )
z = np. arange( 10000 )
np. random. shuffle( z)
n = 5
print ( z[ np. argpartition( - z, n) [ : n] ] )
z = np. random. randint( 0 , 5 , ( 10 , 3 ) )
a = np. array( [ 1 , 2 , 3 , 4 ] )
b = np. array( [ 1 , 2 , 3 , 4 ] )
np. all ( a == b)
np. any ( a == b)
e = np. all ( z[ : , 1 : ] == z[ : , : - 1 ] , axis= 1 )
print ( e)