numpy科学计算库

科普

很多编程语言对数字精确度不是很敏感,python亦是如此

  1234567890.0987654321

  1234567890.01

但是python又可以做人工智能,机器学习,量化交易,数据分析等高精确度的工作

内部其实就是通过相应的模块来实现

numpy简介

1.numpy是高性能科学计算和数据分析的基础包

2.也是pandas等其他数据分析的工具的基础

3.numpy具有多维数组功能,计算更加高效快速

 

下载模块

  在notebook中如果需要执行pip命令下载模块

    只需要在命令行的开头加上一个感叹号即可

      !pip3 install numpy

(在安装完anaconda之后该软件也会给我们提供一个下载模块的工具

  conda使用方式与pip一致

    conda install numpy)

 

导入模块

  import numpy

  import numpy as np  (更加倾向于起别名 np)

 numpy前戏

(notebook单元格左侧如果是星号表示当前单元格正在执行,是数字表示执行完毕)

# 身高
height = [170,173,178,180,183]
# 体重
weight = [76,65,70,77,75]
'''求BMI指数:身体质量指数=体重(KG)/身高(m)的平方'''
BMI = weight/(height/100)**2  # 理想完美 现实报错

伪造数据

import random
h = []
w = []
for i in range(100000000):
    h.append(random.randint(153,180))
    w.append(random.uniform(51,88))

纯python代码实现

import time
# for循环计算
start_time = time.time()
for i in range(100000000):
    w[i]/(h[i]/100) ** 2
end_time = time.time() - start_time
end_time

numpy解决方案

import numpy as np
H = np.array(h)
W = np.array(w)
# 数组运算
start_time = time.time()
BMI = W/(H/100)**2
end_time = time.time() - start_time
end_time

多维数组

一维数组

np.array([1,2,3,4])

二维数组

np.array([1,2,3,4],[9,8,7,6])

(numpy中同一个数组内所有数据类型肯定是一致的

np.array([1,2,False])>>>array([1,2,0])

np.array([1,2,3.1])>>>array([1.,2.,3.1])

numpy中进行数据操作的时候同一个数组内所有的数据都挨个对应参与操作

a1 = np.array([1,2,3,4])

a2 = np.array([7,8,9,1])

a1+a2>>>array([8,10,12,5])

a1*10>>>array([10,20,30,40]))

 

数据类型

布尔型  bool_

整型  int_ int8 int16 int32 int64

  (int32只能表示(-1**31,2**31-1),因为它只有32个位,只能表示2**32个数)

无符号整型  uint8 uint16 uint32 uint64

浮点型  float_ float16 float32 float64

复数型  complex_ complex64 complex128

(1.为什么numpy数据类型以数字居多

  因为numpy主要用于科学计算 只有数字可以参与计算

2.为什么有些数据类型后面加下划线

  因为为了跟python数据类型关键字区分开)

常用属性

T  数组的转置(对高维数组而言)

li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a.T

执行结果:

就相当于是将行变成列,列变成行,它也是一个比较常用的方法

dtype  数组元素的数据类型

size  数组元素的个数

ndim  数组的维度

shape  数组的维度大小(以元组形式)

常用方法

 (如何查看某个方法的使用说明)

  方式1:在方法后面跟问号执行即可

  方式2:写完方法名后先按shift不松开然后按tab即可(shift+tab)

 

array()  将列表转换成数组,可选择显示指定dtype

arange()  range的numpy版,支持浮点型

np.arange(1,10,2)  # 1到10,间隔2
np.arange(1.2,10,0.4)  # 1.2到19,间隔0.4

linspace()  类似arange(),第三个参数为数组长度

np.linspace(1,10,20)  # 1到10,分成20份

 

 

(这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,在1到10之间生成的二十个数,每个数字之间的距离是相等的,前后两个数做减法肯定相等)

zeros()  根据指定形状和dtype创建全0数组

np.zeros((3,4))  # 指定形状,0填充

ones()  根据指定形状和dtype创建全1数组

np.ones((3,4))  # 指定形状,1填充

empty()  根据指定形状和dtype创建空数组(随机值)

np.empty(10)  # 指定形状,随机值填充

eye()  根据指定边长和dtype创建单位矩阵

np.eye(5)

索引与切片

1.针对一维数组,索引与切片操作跟python中的列表完全一致

2.花式索引(间断索引)

age[[0,2,5]]

 

3.布尔值索引(逻辑索引)

age[age>15]

4.针对二维数组索引与切片有些许复杂

  res[行索引(切片),列索引(切片)]

   如果需要获取二维数组的所有行货列元素,那么,对应的行索引或列索引需要用英文状态的冒号表示

arr1=np.array([[ 1, 3, 5, 7],
[ 2, 4, 6, 8],
[ 11, 13, 15, 17],
[ 12, 14, 16, 18],
[100, 101, 102, 103]])

arr1[3,3] # 18
arr1[3,:] # array([12, 14, 16, 18])
arr1[:,1] # array([ 3, 4, 13, 14, 101])
arr1[0:2,1:3] # array([[3,5],[4,6]])

运算符

数学运算符

arr1 = np.array([1,2,3,4,5])
arr2 = np.array([6,7,8,9,10])

+  数组对应元素的加和

-  数组对应元素的差

*  数组对应元素的乘积

/  数组对应元素的商

%  数组对应元素商的余数

//  数组对应元素商的整除数

**  数组对应元素的幂指数

比较运算符

>

等价np.greater(arr1,arr2)

判断arr1的元素是否大于arr2的元素

>=

等价np.greater_equal(arr1,arr2)

判断arr1的元素是否大于等于arr2的元素

<

等价np.less(arr1,arr2)

判断arr1的元素是否小于arr2的元素

<=

等价np.less_equal(arr1,arr2)

判断arr1的元素是否小于等于arr2的元素

==

等价np.equal(arr1,arr2)

判断arr1的元素是否等于arr2的元素

!=

等价np.not_equal(arr1,arr2)

判断arr1的元素是否不等于arr2的元素

函数

 常用的数学函数

arr = np.array([1,2,3,4,5])

  np.round(arr)

    对各元素四舍五入

  np.sqrt(arr)

    计算各元素的算术平方根

  np.square(arr)

    计算各元素的平方值

  np.exp(arr)

    计算以e为底的指数

  np.power(arr,α)

    计算各元素的指数

  np.log2(arr)

    计算以2为底各元素的对数

  np.log10(arr)

    计算以10为底各元素的对数

  np.log(arr)

    计算以e为底各元素的对数

常用的统计函数(重要)

arr=np.array([[ 80.5, 60., 40.1, 20., 90.7],
       [ 10.5, 30., 50.4, 70.3, 90.],
       [ 35.2, 35., 39.8, 39., 31.],
       [91.2, 83.4, 85.6, 67.8, 99.]])

np.min(arr,axis=1)

  按照轴的方向计算最小值

np.max(arr,axis=1)

  按照轴的方向计算最大值

np.mean(arr,axis=1)

  按照轴的方向计算平均值

np.median(arr,axis=1)

  按照轴的方向计算中位数

np.sum(arr,axis=1)

  按照轴的方向计算和

np.std(arr,axis=1)

  按照轴的方向计算标准差

np.var(arr,axis=1)

  按照轴的方向计算方差

 

重要:

  axis=0时,计算数组各的统计值

  axis=1时,计算数组各的统计值

(不使用axis参数)

计算每一行的和

Sum = []
for row in range(4):
    Sum.append(np.sum(arr2[row,:]))
# 计算每一列的平均
Avg = []
for col in range(5):
    Avg.append(np.mean(arr2[:,col]))

使用axis参数

arr2.sum(axis = 1)  # 等价np.sum(arr2, axis = 1)
np.mean(arr2, axis = 0)  # 等价arr2.mean(axis = 0)

随机数

numpy中的random子模块

np.random

 

rand  给定形状产生随机数组(0到1之间的数)

randint  给定形状产生随机整数

choice  给定形状产生随机选择

shuffle  与random.shuffle相同

uniform  给定形状产生随机数组(随机均匀分布)

normal  随机正态分布

posted @ 2021-10-13 22:38  雾雨黑白  阅读(82)  评论(0编辑  收藏  举报