创建数组:
## numpy示例 import numpy as np a=[1,2,3,4] b=np.array(a) print(b,type(b)) #输出结果 [1 2 3 4] <class 'numpy.ndarray'>
数组属性:
#数组个数
print(b.size) #4 #数组形状 print(b.shape) #(4,) #每个元素占用你的字节数 print(b.itemsize) #4 #维数 print(b.ndim) #1
arange定义一个数组,限定步长:
np.arange() 参数为初始值、结束值(不包含)、步长 array_arange=np.arange(10,30,5) print(array_arange) #[10 15 20 25]
linspace定义一个数组,限定数组元素的个数:
np.linspace() 数为初始值、结束值(包含)、元素的个数, array_linspace=np.linspace(0,2,9) #结果第一位是0 中间数值平均分配 结束为2 print(array_linspace) #[0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
快速创建N维数组:
ones,创建10行10列的数值为浮点1的矩阵
array_one=np.ones((5,5),dtype=int) #dtype=int 可以设置类型 print(array_one)
zeros,创建10行10列的数值为浮点0的矩阵
array_zero=np.zeros((2,5,5)) #array_zero=np.zeros((2,5,5)) 2:表示创建2个5行5列的数组 print(array_zero)
创建自定义数值的数组:
full,创建3*3 数值为5的数组
full_array=np.full((3,3),5) print(full_array)
eye,用来构造单位矩阵(默认情况下输出的是对角线全“1”,其余全“0”的方阵eye_array=np.eye(3)
print(eye_array) '''结果 [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ''' empty,生成未初始化的随机值empty_array=np.empty((2,4))
print(empty_array) '''结果为 [[6.23042183e-307 1.42417221e-306 1.37961641e-306 6.23039015e-307] [6.23053954e-307 1.78020169e-306 1.78021527e-306 3.91786943e-317]] '''
random生成随机数组\数值
random.rand(),2*2 (范围是0-1)
array_random=np.random.rand(2,2) print(array_random)
random.uniform(),随机生成指定范围内的一个数(小数)
array_uniform=np.random.uniform(0,5) print(array_uniform) #0.6259318369377503
random.randint(),随机生成指定范围内的一个数(整数不包含2)
array_randint=np.random.randint(0,2) print(array_randint) #1
正太分布
给定均值/标准差/维度的正态分布np.random.normal(1.75, 0.1, (2, 3))
#正态生成4行5列的二维数组 arr=np.random.normal(1.75,0.1,(4,5)) print(arr) #截取第1至2行的第2至3列(从第0行算起) after_arr=arr[1:3,2:4] #【参数1,参数2】 参数1取的行 参数2取的是范围 print(after_arr) # '''结果 [[1.7121083 1.79442264 1.88480996 1.74680449 1.94296451] [1.75145398 1.84717094 1.61700579 1.79300659 1.65306822] [1.84915626 1.82844994 1.42992838 1.74578747 1.81638628] [1.78611223 1.79935389 1.71098421 1.7065452 1.93011894]] [[1.61700579 1.79300659] [1.42992838 1.74578747]] '''
reshape,改变数组形状(注意:要求前后元素个数匹配)
one_20 = np.ones([20]) print("-->1行20列<--") print(one_20) #将上面的一维数组变为下面的二维 one_4_5 = one_20.reshape([4,5]) print("将形状分为-->4行5列<--") print(one_4_5)
where,条件运算
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print(stus_score) #比较并替换运算 res=np.where(stus_score<80,0,90) #(如果数值小于80,替换为0,如果大于80,替换为90) print(res)
统计运算
指定轴最大值amax(求每一行和列的最大值)
# 指定轴最大值amax(求每一行和列的最大值) stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print(stus_score) result_amax=np.amax(stus_score,axis=0) #axis=0/1; 0表示列 1表示行 print('每一列的最大值:',result_amax) #[86 88] result_amax2=np.amax(stus_score,axis=1) print('每一行的最大值:',result_amax2) #[88 82 84 86 81]
指定轴最小值amin(求每一行和列的最小值)
#指定轴最小值amin(求每一行和列的最小值) stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print(stus_score) result_amin=np.amin(stus_score,axis=0) print('每一列的最小值:',result_amin) result_amin2=np.amin(stus_score,axis=1) #[75 75] print('每一列的最小值:',result_amin2) #[80 81 75 83 75]
mean,求平均值
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) # 求每一行的平均值(0表示列) print("每一列的平均值:") result = np.mean(stus_score, axis=0) print(result) #[81.4 81.6] # 求每一行的平均值(1表示行) print("每一行的平均值:") result = np.mean(stus_score, axis=1) print(result) #[84. 81.5 79.5 84.5 78. ]
std,求方差
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) # 求每一行的方差(0表示列) print("每一列的方差:") result = np.std(stus_score, axis=0) print(result) # 求每一行的方差(1表示行) print("每一行的方差:") result = np.std(stus_score, axis=1) print(result)
数组运算
数组与数的运算
加法运算
#数组与数的运算(加法) stus_score=np.array(([80, 88], [82, 81], [84, 75], [86, 83], [75, 81])) print(stus_score) print(stus_score[:,0]) #[80 82 84 86 75] 打印第一列的值 #实现行和列的值都加5 stus_score[:,0] = stus_score[:,0]+5 #每一列值加5 stus_score[:,1] = stus_score[:,1]+5 #每一行值加5 print(stus_score)
乘法运算
#数组与数的运算(乘法) stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print("减半前:") print(stus_score) #实现行和列的值都减一半 stus_score[:, 0] = stus_score[:, 0]*0.5 #每一列乘0.5 stus_score[:, 0] = stus_score[:, 1]*0.5 #每一行乘0.5 print("减半后:") print(stus_score)
数组与数组之间运算加减乘除运算(基本用的不多)
a=np.array([1,2,3]) b=np.array([10,20,30]) c=a+b d=a-b e=a*b f=a/b print(c) #[11 22 33] print(d) #[ -9 -18 -27] print(e) #[10 40 90] print(f) #[0.1 0.1 0.1]
矩阵运算
场景:假设下面每个列表代表每个学生成绩,例如,张三 平时成绩80、期末成绩88,计算每个人总成绩是多少? stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) #根据,平时成绩占40% 期末成绩占60%, 计算结果 q=np.array([[0.4],[0.6]]) result=np.dot(stus_score,q) print(result) '''结果 E:\python36\python3.exe C:/Python数据分析/numpy模块.py [[84.8] [81.4] [78.6] [84.2] [78.6]] '''
vstack矩阵垂直拼接
#vstack矩阵垂直拼接 v1=[[0,1,2,3,4,5,], [6,7,8,9,10,11]] v2=[[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]] result=np.vstack((v1,v2)) print('v1与v2垂直拼接结果为:',result) '''结果 [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]] '''
hstack矩阵水平拼接
#hstack矩阵水平拼接 v1=[[0,1,2,3,4,5,], [6,7,8,9,10,11]] v2=[[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]] result=np.hstack((v1,v2)) print('v1与v2水平拼接结果为:',result) '''结果 [[ 0 1 2 3 4 5 12 13 14 15 16 17] [ 6 7 8 9 10 11 18 19 20 21 22 23]]
练习题目:
题目1:对一个二维数组,选出其第一列和第二列,组成新的二维数组。
res=np.array(([1,2,3],[4,5,6],[7,8,9])) print(res) print(res[:,[1,2]]) #思路第一个参数时表示去所有行,近一步然后取第1,2列 '''结果为 [[1 2 3] [4 5 6] [7 8 9]] [[2 3] [5 6] [8 9]] '''
题目2:对于一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组。
res=np.array([1,2,3,4,5,6,7,8,9]) print(res[[1,3,4,6,7]])
## numpy示例 py06
import numpy as np
import random
#创建ndarray
# arange:range的numpy版,支持浮点数
# 复制代码
a=np.arange(10,100) #步长为1
print(a)
print()
# array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,95, 96, 97, 98, 99])
## 步长
a=np.arange(10,100,20) #步长为20
print(a)
print()
# array([10, 30, 50, 70, 90])
# 强大的小数步长(普通的range是不支持的)
a=np.arange(10,100,23.56)
print(a)
print()
# array([ 10. , 33.56, 57.12, 80.68])
#复制代码
# linspace:类似arange(),第三个参数为数组长度
# 将3到10的数平均分为11份
b=np.linspace(3,10,11)
print(b)
print()
# array([ 3. , 3.7, 4.4, 5.1, 5.8, 6.5, 7.2, 7.9, 8.6, 9.3, 10. ])
#zeros() 根据指定形状和dtype创建全0数组
#复制代码
c=np.zeros(10)
print(c)
print()
# array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
c=np.zeros(10,dtype="int")
print(c)
print()
#array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
# d多维的
d=np.zeros((3,5))
print(d)
print()
''' array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
'''
#复制代码
#ones() 根据指定形状和dtype创建全1数组
a=np.ones(10)
print(a)
print()
# array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
a=np.ones(10,dtype="float")
print(a)
print()
# array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
d=np.ones((5,8))
print(d)
print()
''' array([[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.]])
'''
p=np.ones((2,3,5))
print(p)
print()
''' array([[[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]],
[[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]]])
'''
#复制代码
# empty() 根据指定形状和dtype创建空数组(随机值)
a=np.empty(10)
print(a)
print()
# array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
b=np.empty(6)
print(b)
print()
# array([ 3.2, 4. , 23. , 1. , 6. , 23. ])
c=np.empty((3,2))
print(c)
print()
# array([[ 3.2, 4. ],[ 23. , 1. ],[ 6. , 23. ]])
#复制代码
#ones和zeros 是先开一块空间,然后再去填充数据
#empty是开一块空间,但是不去赋值,而里边的数据是内存里边没用的数据(已经被释放的数据),所以empty更省时间
#reshape 重新调整矩阵的行数、列数、维数
a=np.arange(15)
print(a)
print()
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
print( a.reshape((3,5)) )
print()
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#相乘必须是15
# ERR! a.reshape((3,4))
# ValueError Traceback (most recent call last)
# <ipython-input-83-a5f367ac0d99> in <module>()
# ----> 1 a.reshape((3,4))
# ValueError: cannot reshape array of size 15 into shape (3,4)
#生成多维数组
a=np.arange(15).reshape(3,5)
print(a)
print()
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#复制代码
#eye() 根据指定边长和dtype创建单位矩阵
#对角的值都相等
e=np.eye(5)
print(e)
print()
# array([[ 1., 0., 0., 0., 0.],
# [ 0., 1., 0., 0., 0.],
# [ 0., 0., 1., 0., 0.],
# [ 0., 0., 0., 1., 0.],
# [ 0., 0., 0., 0., 1.]])