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]]
#每一行 相当于对应位置相减 ,如果是列数相同一样
广播原则:
轴的概念:可以理解为方向,使用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)