- 属性: 维度 元素类型 大小 形状
- 创建一维 : 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]]