numpy

目录

numpy

numpy

numpy

#常见

数据类型表见:https://blog.****.net/Zhili_wang/article/details/81140282?utm_source=blogxgwz2


import numpy as np
t1=np.array(range(1,11))
print(t1)  #[ 1  2  3  4  5  6  7  8  9 10]
print(type(t1)) #  <class 'numpy.ndarray'>  查看自己是谁实例化出来的
print(t1.dtype)  # int32   查看数据类型
t2=np.array(range(1,11),dtype="i1") # [ 1  2  3  4  5  6  7  8  9 10]  制定数据类型
t3=np.array(range(1,11),dtype="?") #[ True  True  True  True  True  True  True  True  True  True] 制定bool数据类型
t4=t2.astype("int64")  #   1  2  3  4  5  6  7  8  9 10]    注意:bool值转换回来为 bool值转换 结果为0或1

import  random
t5=np.array([random.random() for i in range(6)])
t6=t5.round(decimals=2)  #float64的数组,只取两位小数返回  或者round(t5,2) 也是一样的
print("%.3f"%0.9222) #python 种生成随机数 0.922

 

定制一个数组

np.array([1,2,3,4,5,6..,12],[1,2,3,4,5,6..,12])


修数组的形状

 reg=b.reshape(12,)

数字的形状:
换形状:

 b=a.reshape(3,4) )#如果数字不对应上会崩


查看形状:

b.shape  #(3,4)


转为一维数字 :

reg=b.reshape(12,)  #reg=array([1,2,3,4,5,6..,12]


碾开成一维度


b.flatten()

数组+-*/数字:广播的形式,对每个数字上都加减乘除

b.reshape(12,) +1  
b.reshape(12,) *2  

用像range的形式生成一个范围的数组

:np.arange(0,6 )# array[0,1,2,3,4,5]


3维数字(2,3,4)

 值得是 块、每一个块的行数、 列数 


数组之间相加减:
如果行或列相同,那么减去相同那一列

sz2=sz1.reshape(2,6)
print(sz2)
print(sz2-np.arange(6))
# [[ 0  1  2  3  4  5]                              [[0 0 0 0 0 0] 
#  [ 6  7  8  9 10 11]]     减去   np.arange(6) = [6 6 6 6 6 6]]
#每一行 相当于对应位置相减  ,如果是列数相同一样  

广播原则:

numpy

 

轴的概念:可以理解为方向,使用0,1,2表示,更方便计算,比如先求出某个轴上的平均值

一维数组:横向0

二维:0,1 比如shape(3,4) 3表示0轴,4表示1轴

三维012   比如shape(1,3,4)  0表示块,1表示横向,2表示竖向

从文件中得到数组

import numpy as np
user_path=r"C:\Users\xzq\PycharmProjects\untitled18\数组\qq.csv"
t1=np.loadtxt(user_path,delimiter=",")
# loadtxt(fname, dtype=float,delimiter=None,skiprows=0, usecols=None, unpack=False)
print(t1) #数据

dtype=数据类型,默认为float,
delimiter 分隔符是什么
skiprows 跳过第几行
unpack  反置  旋转45度放置数据 或者理解成 x,y的数据交换

数据反置三种方式

import numpy as np
user_path=r"C:\Users\xzq\PycharmProjects\untitled18\数组\qq.csv"
t1=np.loadtxt(user_path,delimiter=",")
# loadtxt(fname, dtype=float,delimiter=None,skiprows=0, usecols=None, unpack=False)
print(t1.transpose())
print(t1.T)
print(t1.swapaxes(0,1))

 

按索引取值

#按照索引取值
import numpy as np
user_path=r"C:\Users\xzq\PycharmProjects\untitled18\数组\qq.csv"
t1=np.loadtxt(user_path,delimiter=",")
print(t1)
print("*"*100)
print(t1[2],t1[2].shape)  #只取第二行  为一维数组(4,)
print(t1[2:]) #值取第二行后面的
print(t1[[2,4],]) #取指定的行
print("*"*100)
print(t1[1,:]) #取第一行的所有的列
print(t1[2:,:]) #取第二行后的所有的列
print(t1[2:,:]) #指定行 的所有的列
print(t1[:,0]) #所有行的第0列,一维数组
print(t1[0,0])#取指定值,为numpy的数字 int32
print(t1[2:5,1:4])#取交叉位置范围内的值
print(t1[0,2,2],[0,1,2,])#(0,1) (2,1) (2,2)    取指定的几个点转为一维数组

数值的修改

#替换所选目标
print(t1)
t1[:,2:4]=33
print(t1)   #[ 281.   40.   33.   33.]
 #          [ 537.  620.   33.   33.]
print(t1<100)  #[False False  True  True]
print(t1[t1<100]) #[33. 33. 40. 33. }
t1[t1<100]=10 #小于100的全变了
print(np.where(t1<100,200,0)) # 条件满足都变为左边,条件不满足都为右边
t1.clip(10,18)只要这个范围的数组,大于这个范围都是18,小于都是10
nan  float 可以转为 nan 其他的不行

数据拼接

import numpy as np
user_path2=r"C:\Users\xzq\PycharmProjects\untitled18\数组\qq2.csv"
user_path3=r"C:\Users\xzq\PycharmProjects\untitled18\数组\qq3.csv"
t2=np.loadtxt(user_path2,delimiter=",")
t3=np.loadtxt(user_path3,delimiter=",")
# n4=np.vstack((t2,t3)) #数值拼接 叠在上下 第一个元素为元祖
n5=np.hstack((t2,t3)) #水平拼接 叠在左右 数量需要相等
n5[[1,2],:]=n5[[2,1],:] # 2和1 行数据交换
n5[,:[1,2]]=n5[,:[2,1]] # 2和1 列数据交换

 

print(t2)
print(np.argmax(t2,0))#每一列上最大的索引,[0 2 2 0] 相反的为argmin   0为↓
print(np.argmax(t2,1))#每一行上最大的索引,[0 2 2]   相反的为argmin   1为→
# print(np.zeros((3,4)))  # 三行4列的全0数组
# print(np.ones((3,4)))  # 三行4列的全1数组
# print(np.eye(8))  # 行列为8的正方形元祖,对角线为1

产生随机数组

np.random.seed(2)
print(np.random.randint(10,20,(4,5)))  #产生10~20 之间的 形状为(4,5)数组

#其他方法
# rand    均匀分布0~1的浮点
# randn     正太fen'bu
#randint
#unifrom
#normal
# seek  每次启动都相同

numpy中的浅拷贝深拷贝

a=b 完全引用,相互影像
a=b[:]创建新的 但是数据还是共享
a=b.copy()  a,b 相互不影响

nan和inf的使用

nan 表示不是一个数字 ,而inf 是无穷大

import  numpy as np
print(np.nan  ==  np.nan) #false 两个值虽然都是 non 但是有可能表示的东西不一样

t2!=t2#找出不相等的数
np.isnan(t2)#判断数组中nan 个数
np.count_nonzero(t2!=t2) #统计不为False的个数
np.isnan(t2) # 筛选出是nan的数组
t2[np.isnan(t2)]=9 # 筛选出是nan的数组,并全部替换
print(np.sum(t2)) #统计整个数组的合
print(np.sum(t2,axis=0)) # 轴上统计

   

替换Nan

t2.sum(axis=0) #总和
t2.mean(axis=0)  #均值
np.median(t2,axis=0)  #均值
t2.max(axis=0)  #最大值
t2.min(axis=0)  #均值
#q其他 np.ptp(t2) 极差  t.std()标准差
print(t1)
print("*"*120)
for  i in range(t1.shape[1]):
    teml_col=t1[:,i]
    if np.count_nonzero(teml_col!=teml_col)!=0:
        duicuo_arry=teml_col[teml_col==teml_col]  #筛选出 不为nan的数组[ 5. 11. 23.]
        junzhi=duicuo_arry.mean() #均值
        teml_col[np.isnan(teml_col)]=junzhi #当前行中为non的都变为均值
print(t1)