python学习——numpy库

  • 属性: 维度 元素类型 大小 形状
  • 创建一维 : np.arange np.linspace 注意range()只能for循环
  • 创建零数组 一数组 单位数组
  • 数组拼接: hstack vstack stack(axis=0或1)
  • 数组拆分: hsplit vsplit
  • 数组交换行列
  • 添加一列或一行全为0或1
  • 创建随机数组
  • 找数组中行列的最大最小值
  • print(ar1 is ar2) 理解is 的用法, copy()一份数据
  • 数组+10 数组*2 都是对每个元素进行计算
  • np.sum(数组, axis=0或1) : 给每列求和 或者 给每行求和
  • 数组[ : 2 , 2 : ] : 意思是前两行, 第三列以后全部
  • bool索引, [bool , : ] , [ : , bool]
  • 回顾三元运算符 a = 3 if 3>2 else 4 输出a = 3
  • numpy中的三元运算符 a = np.where(t2<10,0,10)
  • numpy中clip 替换 极端小, 极端大的值, 箱型图找到替换减小误差
  • numpy 不能对int整型赋值np.nan, 必须先转换float
  • numpy 中统计非0 的个数 :np.count_nonzero(数组)

nd.array的属性

查看有几个维度
数组形状
数组大小
数组元素类型
数组元素站点字节大小
数组的内存地址
import numpy as np
ar = np.array([[1,2,3,4,5,6],[4,5,6,7,8,9]])
print(ar,type(ar))
print(ar.ndim) #查看有几个维度
	#2
print(ar.shape)#输出数据的形状
	#(2, 6)
print(ar.size)
	#12
print(ar.dtype)#查看数组里面数值的类型
	#int32
print(ar.itemsize)#查看数组里面元素的字节大小
	#4
print(ar.data)
	#<memory at 0x0000028296EB7AD0>
	

创建一维数组`

一维的规定间隔, 或者规定几个元素
print(np.arange(5.0,12,2))#5.0到12.0,步长为2,一维的
	#[ 5.  7.  9. 11.]
print(np.linspace(10,20,num=21))#10到20之间固定间隔创建20个元素的数组
	#[10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5 17.  17.5 18.  18.5 19.  19.5 20. ]

创建多维的零数组, 一数组, 单位数组

零数组

规定数组大小, 并定义类型, int或float

print(np.zeros((3,5),dtype=np.float32))
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

创建一个和其他任意数组一样形状的零数组

ar = np.array([list(range(10)),list(range(10,20))])
print(ar)
print(np.zeros_like(ar))
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
[[0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]]

一数组

规定数组大小, 并定义类型, int或float

print(np.ones((3,5),dtype=np.float32))
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]

创建一个和其他任意数组一样形状的一数组

ar = np.array([list(range(10)),list(range(10,20))])
print(ar)
print(np.ones_like(ar))
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
[[1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1]]

创建单位数组

规定数组大小, 并定义类型, int或float

print(np.eye(4,dtype = np.float32))
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

数组竖直拼接

t1 = np.arange(12).reshape(2,6)
print(t1)
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
'''
t2 = np.arange(12,24).reshape(2,6)
print(t2)
'''
[[12 13 14 15 16 17]
 [18 19 20 21 22 23]]
'''

t3 = np.vstack((t1,t2))#竖直拼接,竖的直接摞一起
print(t3)
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
'''

竖直拼接,即两个数组上下直接叠在一起。

数组水平拼接

t1 = np.arange(12).reshape(2,6)
print(t1)
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
'''
t2 = np.arange(12,24).reshape(2,6)
print(t2)
'''
[[12 13 14 15 16 17]
 [18 19 20 21 22 23]]
'''

t3 = np.hstack((t1,t2))#水平拼接,横横的拼接
print(t3)
'''
[[ 0  1  2  3  4  5 12 13 14 15 16 17]
 [ 6  7  8  9 10 11 18 19 20 21 22 23]]
'''

水平拼接,即两个数组直接横着挨着放到一起。

注意:拼接操作,必须满足格式要求,竖直拼接,要求列数一样,水平拼接,要求行数一样

数组拆分

hsplit()
vsplit()
把原数组拆分为几个, 按横向或纵向

ar = np.arange(16).reshape(4,4)
print(ar)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
 
print(np.hsplit(ar,2)[0])#把4*4的数组横向拆分,[0]第一个即前两列
[[ 0  1]
 [ 4  5]
 [ 8  9]
 [12 13]]
 
print(np.vsplit(ar,2)[1])#把4*4的数组竖向拆分,[1]第二个即后两行
[[ 8  9 10 11]
 [12 13 14 15]]

两数组交换行列

t1[[0,1],:] = t1[[1,0],:]#行交换,
print(t1)
'''
[[ 6  7  8  9 10 11]
 [ 0  1  2  3  4  5]]
'''
t1[:,[0,2]] = t1[:,[2,0]]#列交换,0列和2列
print(t1)
'''
[[ 8  7  6  9 10 11]
 [ 2  1  0  3  4  5]]
'''

常规操作,需要记忆。

numpy加载外部数据

us_file_path = './youku_date/US_video_data_numbers.csv'
us_data = np.loadtxt(us_file_path,delimiter=',',dtype=int)
print(us_data.shape)
#(1688, 4)

一般不使用numpy库读取外部数据,
一般会使用pandas库读取外部数据

pandas库读取外部数据

import pandas as pd

df = pd.read_csv('./youku_date/dogNames2.csv')
print(df.info())#显示数据的基本统计信息

一般不使用numpy,而使用pandas因为pandas中有比较多且方便的读取外部数据的配套方法。

numpy数组中添加一列全为0或1的数

zero_data = np.zeros((us_data.shape[0],1)).astype(int)#默认创建的0数组是float类型的

one_data = np.ones((us_data.shape[0],1)).astype(int)#创建一列数据,即有好多行

us_data = np.hstack((us_data,zero_data))#完成拼接

找数组中每行或每列的最大最小值的位置

argmax()函数
参数axis = 0 找每行最大的位置
参数axis = 1 找每列最大的位置

t = np.eye(4)
a = np.argmax(t,axis=0)
print(a)

同理argmin()函数

创建随机数组

创建 0 到 1 的随机数组

  • .random.rand()

创建0 到100 的随机数组(上面的乘100)

  • .random.rand()*100

创建 0 到 1 的服从正态分布, 平均数0, 标准差1, 的数组

  • .random.randn()

创建 最小 到 最大 的整数数组, 括号规定形状

  • .random.randint(最小, 最大, (形状))

创建 最小 到 最大 的均匀数组, 括号规定形状

  • .random.uniform(最小, 最大, (形状))

创建规定平均值 标准差的数组

  • .random.normal(平均值, 标准差, (形状))
print(np.random.rand(3,4))
[[0.95702545 0.95412051 0.53945259 0.48031482]
 [0.60733453 0.68697459 0.79968297 0.3828153 ]
 [0.78499228 0.58308671 0.03537946 0.0780182 ]]

print(np.random.rand(3,4)*100)
[[ 1.16784086  3.24742656 60.85346597 37.12256997]
 [63.56454685  3.0959885  63.45543431 83.97919307]
 [89.41001613  1.86029359 51.73772377 36.84759035]]

print(np.random.randn(3,4))
[[-0.8175683  -0.46375323  1.06843984  0.3367699 ]
 [ 0.55399042  0.18574952 -1.19086168 -1.1221194 ]
 [-0.78863193  0.16552734  1.20207746  1.07304744]]

print(np.random.randint(1,10,(3,4)))### 主要 不能取到10
[[4 9 5 3]
 [1 5 3 9]
 [6 8 6 4]]

print(np.random.uniform(1,10,(3,4)))### 均匀分布
[[1.90575878 9.49945221 7.74993811 4.40233608]
 [7.93641984 1.84274569 8.4046037  9.28109085]
 [1.64306976 7.35618628 4.23083439 2.40198459]]

两个数组实质是同一个, 需要copy()

项目中, 原始数据不想乱改, 则需要copy复制一份

ar1 = np.arange(10)
ar2 = ar1
print(ar1 is ar2)# 输出 true 两个数组是同一个
ar1[2] = 100
print(ar1,ar2)#两个数组都会改变
ar3 = ar1.copy()
print(ar3 is ar1)# 输出 false 不是同一个

bool 索引

ar = np.arange(12).reshape(3,4)
print(ar)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 
i = np.array([True,False,True])
j = np.array([True,True,False,False])

print(ar[i,:])
[[ 0  1  2  3]
 [ 8  9 10 11]]

print(ar[:,j])
[[0 1]
 [4 5]
 [8 9]]
 
print(ar[ar>5])
[ 6  7  8  9 10 11]

中括号嵌套

获取指定列
获取指定行
获取多个指定位置的元素

t1 = np.arange(12).reshape(3,4)
print(t1)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 
print(t1[[0,2]])
[[ 0  1  2  3]
 [ 8  9 10 11]]
 
print(t1[:,[0,2]]) # 不可以省略前面的冒号
[[ 0  2]
 [ 4  6]
 [ 8 10]]

print(t1[[0,2],[0,1]])
[0 9]

numpy中的三元运算符

np.where()
数组中的元素, 为true的修改为一种值, 为false的修改为一种值

t2 = np.arange(24).reshape(4,6)
a = np.where(t2<10,0,10)
print(a)
[[ 0  0  0  0  0  0]
 [ 0  0  0  0 10 10]
 [10 10 10 10 10 10]
 [10 10 10 10 10 10]]

numpy中替换极端小, 极端大的值

数组. clip(极端小, 极端大)
数组中存在nan 的, 保持nan不变

t2 = np.arange(24).reshape(4,6)
a = t2.clip(10,18)
print(a)
[[10 10 10 10 10 10]
 [10 10 10 10 10 11]
 [12 13 14 15 16 17]
 [18 18 18 18 18 18]]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值