python ——numpy库学习

numpy重在数值计算,也是大部分Python科学计算库的基础库

创建数组

1.

import numpy as np
t1=np.array([1,2,3])
print(t1)
print(type(t1))

[1 2 3]    打印出来没有逗号
<class 'numpy.ndarray'>  类型 ndarray  数组类型

2.b=np.arry(range(1,6))

3.

import numpy as npt1=np.arange(1,10,1)print(t1)print(type(t1))

 [0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>

数组的类名

type(t1) -----> numpy.ndarry


数据的类型

a.dtype------>‘int64’当前数组存放的数据的类型,自己加的64,我电脑6


数据类型的手动指定

b=np.arry(range(1,6),dtype=float)

b=np.arry(range(1,6),dtype='float64')

print(b.dtype)#float64

import numpy as npt5=np.array([1,0,1,0],dtype=bool)#布尔类型print(t5)

[ True False  True False] 

调整数据类型

 t6.t5.astype('int8') #就变回去了

修改浮点型的小数位数

import numpy as np
import random
t7=np.array([random.random() for i in range(10)])#生成随机数print(t7)
t8= np.round(t7,2)#保留两位小数print(t8)

[0.93 0.83 0.66 0.67 0.54 0.64 0.9  0.62 0.83 0.07]

 数组的形状

import numpy as np
import randomt1 = np.arange(12)
print(t1.shape)
t2=np.array([[1,2,4,5],[5,6,3,9]])
print(t2.shape)

(12,)  #只有一个表示个数,一位数组
(2, 4)#两行4列,二维数组

修改数组的形状

a.recshape(3,4)

import numpy as npimport randomt2=np.arange(1,11,1)t2.reshape((2,5))

import numpy as np
import random
t2=np.arange(1,25,1)t2.reshape((2,3,4))#产生一个返回值
print(t2.reshape((2,3,4)))#2表示块,3每一块三行,4列

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]

t2还是原来的t2,它本身不会发生变化

t2=t2.reshape((2,3))#原地操作,没有返回值 

二维变一维 t2.reshape((24, 不要写))

t2.reshape((1,24))#二维数组  t2.reshape(1,24)#不传元组也是可以的


不知道数字有多少个的情况下变成一维的数组


t2.shape[0]*t2.shape[1]#知道它一共的个数

t3=t2.reshape((t2.shape[0]*t2.shape[1],))


t3=t2.flatten()#展平 


t2+2每个数字都加2,和MATLAB一样

import numpy as np
t2=np.arange(0,24,1)
t3=t2.reshape((4,6))/0
print(t3)

[[nan inf inf inf inf inf]
 [inf inf inf inf inf inf]
 [inf inf inf inf inf inf]
 [inf inf inf inf inf inf]]   #除以0还是可以运行的

nan是0/0的结果,Not a Number,非数

 数组一样,加减乘除都是对应位置的计算

数组不一样大,维度相同的做计算

import numpy as np
t2=np.array([0,1,2,3,4,5])
t3=(np.array(range(0,24,1))).reshape(4,6)
print(t3-t2)

[[ 0  0  0  0  0  0]
 [ 6  6  6  6  6  6]
 [12 12 12 12 12 12]
 [18 18 18 18 18 18]]

 不同维的会报错

二维的有一个维度是一样的就可以计算

如果两个数组的后缘维度(即从末尾开始算起的维度)的周长相符,则认为他们是广播兼容的。广播会在缺失的维度上进行

shape为(3,3,3)的数组不能和(3,2)的数组进行计算

shape为(3,3,2)的数组能够和(3,2)和(3,3)的数组进行计算 

在某个方向上维度是一样的就可以计算


在numpy中可以理解为方向,使用0,1,2..数字表示,对于一个一维数组,只有0轴,对于2维数组,有0轴和1轴,对于三维数组有0,1,2轴

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yo55qE5LiN6IO95YaN56yo55qE5oeS576K576K,size_10,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yo55qE5LiN6IO95YaN56yo55qE5oeS576K576K,size_12,color_FFFFFF,t_70,g_se,x_16

 块这个轴是0轴,其他就是行列

 numpy读取数据

CSV——逗号分隔值文件

显示:表格状态

no.loadtxt(frame.dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

frame:文件路径   delimiter:分割   skiprows:跳过行  usecols:用那几列   unpack:转置


t2.transpose()     t2.T #转置        t2.swapaxes(1,0)#交换轴

三个效果一样


numpy索引和切片

t2[1:3]取多行   t2[2]取第二行

取不连续的多行  t2[      [2,8,10]         ]  


取列

 t2[行,列]

t2[:,1]取第一列,所有的行都要


取多行和多列

t2[2,3] #三行四列的值

t2[2:5,1:4]]#取3-5行,2-4列的交叉点值  0开始的 

取多个不相邻的点

t2[   [0,2]   ,[0,1]   ]#取3-5行,2-4列的值    【0,0】这个值  ,【2,1】这个值


numpy数值的修改

t[:,2:4]=0

t2[t2<10]=0   #让t2中小于10的等于3

np.where(t2<10,0,10)#把小于10的换成0,把大于10 的变成10

t2.clip(10,18)小于10的替换为10,大于18的替换成18

  nan没有被替换,nan是一个浮点类型

t2.astype(float)

t2[3,3]=np.nan


数组的拼接

np.vstack((t1,t2))   #竖直拼接

np.hstack((t1,t2)) #水平拼接

水平分割和水平拼接正好相反   (竖直)

行列交换

t[  [1,2],  : ]   = t[   [2,1],  :]   #第二行和第三行交换

构造全为0的数组  np.zeros((t2.shape[0],1))      #全为1  np.ones

创建一个对角线为1的正方形数组(方阵):np.eye(3)

#获取最大值,最小值的位置  np.argmax(t,axis=0)   axis=0表示,行与行之间的值比较,就是列的最大值

                                               np.argmin(t,axis=1)

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

---------------------------------
[3 3 3 3 3 3]


numpy生成随机数

参数解释
.rand(n,m)创建n*m维度的均匀分布的随机数组,浮点数,范围从0-1
.randn(n,m)符合标准正态分布的随机数组,平均数为0,标准差为1
.randint(low,high,(shape))从给定上下限范围选取随机数整数
.uniform(low,high,(size))产生均匀分布的数组
.seed(s)随机种子,s是给定的种子值。因为计算机生成的是伪随机数,所以通过设定相同的随机种子,可以每次生成相同的随机数
import numpy as npnp.random.seed(10)#添加随机种子print(np.random.randint(0,20,(3,4)))

seed里面的数字就是一个标记,随便写任何值都是可以的,就是标记一下你这个随机数据的编号

第一次是随机的,后面的结果都是一样的

a=b  完全不复制,a和b相互影响

a=b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的

a=b.copy(),复制,a和b相互不影响


nan和inf (浮点类型)

nan(NAN,Nan):表示不是一个数字,nan浮点类型

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan

不合适的运算inf-inf,也会出现nan

inf(-inf,inf):  inf正无穷

除以0(python会直接报错,numpy中则是无穷)

两个nan是不相等的

np.nan==np.nan#False

 判断数组中不为0值的个数

np.count_nonzero(t2)

  判断数组中为nan值的个数

np.count_npnzero(t2!=t2)   #    t2!=t2只有nan这个位置 true   (1)

np.isnan(t2) 

 nan和任何值计算都是nan


t.sum(axis=None)#求和  axis=0 行和行相加变成一行

不传就是求所有数的和

t.mean(axis=None)#均值

np.median(t,axis=None)#中位数

t.max(axis=None)#最大值

t.min(axis=None)#最小值

np.ptp(t2,axis=None)#极值

t.std(axis=None)#标准差

矩阵操作

import numpy as np
A=np.array([5,1,10,20,30])
print(A==10)
print(A[A==10])#A[true]就给它取出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值