Numpy介绍:

NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。

NumPy的主要功能:

1)ndarray,一个多维数组结构,高效且节省空间

2)无需循环对整组数据进行快速运算的数学函数

3)读写磁盘数据的工具以及用于操作内存映射文件的工具

4)线性代数、随机数生成和傅里叶变换功能

5)用于集成C、C++等代码的工具

pyhton里面安装、引入方式:

安装方法:pip install numpy

引用方式:import numpy as np

创建数组:

a=[1,2,3,4]

b=np.array(a)print(b,type(b)) #[1 2 3 4]

数组属性:

#数组个数

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列

one_4_5= one_20.reshape([4,5])print("将形状分为-->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/bprint(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]])

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐