在这里插入图片描述

一、简介

1.Numpy介绍

       NumPy (Numerical Python)是一个开源的Python科学计算库,于快速处理任意维度的数组。NumPy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。NumPy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

2.Numpy的优点

●对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多 ;
●NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且能够提升的性能是与数组中的元素成比例的;
●NumPy的大部分代码都是用C语言写的,底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多。

3.Numpy的ndarray与Python原生list运算效率比较

import random
import time
import numpy as np

a = []
for i in range(100000000):
    a.append(random.random())  #产生一个随机数并添加到a列表中
t1 = time.time()  #记录使用sum函数的起始时间
sum1 = sum(a)
t2 = time.time()  #记录使用sum函数求和的终止时间

b = np.array(a)  
t3 = time.time()  #记录使用np.sum()的起始时间

sum2 = np.sum(b)
t4 = time.time()  #记录使用np.sum()的终止时间
print('python原生list运算时间:',(t2-t1),'\nndarray运算时间:',t4-t3)

在这里插入图片描述
       经过不同长度数据的测试,很明显,numpy的ndarray比python原生的list的运算速度要快几倍。

二、Numpy的Ndarray对象

1.创建一维数组

import numpy as np

list1 = [1,2,3,4]
oneArray = np.array(list1)
print(oneArray)
print(type(oneArray))

在这里插入图片描述

# 传入range生成序列
oneArray = np.array(range(10))
print(oneArray)
print(type(oneArray))

在这里插入图片描述

# 使用numpy自带的np.arange()生成数组
oneArray = np.arange(0,10,2)  #生成0-9,步长是2的数组
print(oneArray)
print(type(oneArray))

在这里插入图片描述

2.创建二维数组

import numpy as np

list1 = [[1,2],[3,4],[5,6]]
oneArray = np.array(list1)
print(oneArray)

在这里插入图片描述

3.常用属性

#获取数组的维度
print(oneArray.ndim)
# 形状(行、列)
print(oneArray.shape)
# 有多少个元素
print(oneArray.size)

4.调整数组的形状

# 将多维变成一维数组
print(oneArray)
#默认情况下'C'以行的顺序展开,'F'意味着以列的顺序展开

# 方法一:
print('以列的顺序展开:',oneArray.flatten(order='F'))
print('以行的顺序展开:',oneArray.flatten(order='C'))
# 方法二:
print('以列的顺序展开:',oneArray.reshape((6,),order='F'))
print('以行的顺序展开:',oneArray.reshape((6,),order='C'))

在这里插入图片描述

# 设置一个一维数组t
t = np.arange(24)

# 将t这个一维数组转换为二维数组
print('一维转二维:\n',t.reshape((4,6)))

# 将一维数组转换为三维数组
print('一维转三维:\n',t.reshape((2,3,4)))

在这里插入图片描述

# 将数组转换为list
a = oneArray.tolist()
print(a)
print(type(a))

在这里插入图片描述

三、数组的计算

1.数组和数的计算

# 由于numpy的广播机制,在运算过程中,
# 加减乘除的值被广播到所有的元素上面
f = np.array([1,2,3,4,5],dtype=np.int16)
print(f)
print(f+1)
print(f*2)

在这里插入图片描述

2.数组与数组之间的操作

#同种形状的数组(两数组中对应位置进行计算操作)
t1 =np.arange(24).reshape((6,4))  #0-23,6行4列的矩阵
t2 =np.arange(100,124).reshape((6,4)) #100-123,6行4列的矩阵
print(t1+t2)
print(t1*t2)

在这里插入图片描述

#不同形状的多维数组计算
# 必须满足:(M行, N列) * (N行, Z列) = (M行, Z列)
import numpy as np
score =  np.array([[1,4,7],[2,5,8],[3,6,9]])
a = np.array([[1,4],[2,5],[3,6]])
print(score)
print(a)

np.dot(score,a)

在这里插入图片描述

#行数或者列数相同的一维数组和多维数组可以进行计算
#行形状相同(会与每一行数组的对应位相操作)
t1 =np.arange(24).reshape((4,6))
t2 =np.arange(6)
print(t1+t2)
print(t1*t2)

在这里插入图片描述

# 列形状相同(会与每一个相同维度的数组的对应位相操作)
t1 =np.arange(24).reshape((4,6))
t2 =np.arange(4).reshape((4,1))
print(t1+t2)
print(t1*t2)

在这里插入图片描述

四、数组中的轴

1.什么是轴

       在numpy中可以理解为方向,使用0,1, 2数字表示,对于一个一维数组,只有一个0轴, 对于2维
数组(shape (2, 2))有0轴和1轴,对于3维数组 (shape (2, 2, 3) )有0, 1, 2轴

2.为什么要学习轴:

       有了轴的概念后,我们计算会更加方便,比如计算-个2维数组的平均值, 必须指定是计算哪
个向上面的数字的平均值。
在这里插入图片描述
在这里插入图片描述

# axis=0
a = np.array([[1,2,3],[4,5,6]])
print(a)
print(np.sum(a,axis=0))
# axis=1
print(np.sum(a,axis=1))

在这里插入图片描述

# axis=2
a = np.arange(27).reshape((3,3,3))
print(a)
b = np.sum(a,axis=2)
print('======')
print(b)

在这里插入图片描述

五、数组的索引和切片

1.一维数组的操作方法

a = np.arange(10)
print(a[2:9:2])  #从索引2到索引9,步长为2

# 如果放置一个参数,将返回与该索引相应位置的单个元素
print(a[4])

在这里插入图片描述

2.多维数组的操作方法

a = np.arange(24).reshape(4,6)
print(a)
print(a[1])  #取第一行,也可写作a[1,]
print(a[1:3]) #截取第1到3行

print(a[:,1]) #取第一列

在这里插入图片描述

六、数组中的数组修改

a = np.arange(24).reshape(4,6)
print(a)
# 修改第1行第1列元素的值
a[0,0] = 1
#修改第2行的值
a[1,:] = 2
# 修改第1列的值
a[:,0] = 1
print(a)

在这里插入图片描述

七、数组的添加和删除

1.数组的添加

       numpy . append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中。输入数组的维度必须匹配否则将生成ValueError。

参数说明:
    arr:输入数组
    values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
    axis:默认为None。 当axis无定义时,是横向加成,返回总是为一维数组!当axis有定
    axis有定义的时候,分别为01的时候(列数要相同)。当axis为1时, 数组是加在右边(行数要相同)
import numpy as np
# 数组的添加
a = np.array([[1,2,3],[4,5,6]])
print(a)

#向数组添加元素
print(np.append(a,[7,8,9]))  #当axis无定义时,返回值总是一维数组!
#沿0轴添加元素
print(np.append(a,[[7,8,9]],axis=0))
# 沿1轴添加元素
print(np.append(a,[[10],[11]],axis=1))

在这里插入图片描述
       numpy. insert函数在给定索引之前,沿给定轴在输入数组中插入值。如果值的类型转换为要插入,则它与输入数组不同。插入没有原地的, 函数会返回一个新数组。此外, 如果未提供轴,则输入数组会被展开。

a = np.array([[1,2],[3,4],[5,6]])
print(a)
# 未传递axis参数,在插入之前输入数组会被展开为一维数组
print(np.insert(a,3,[11,12])) #插入到3号位置
#传递了axis参数。会被广播
#沿0轴广播
print(np.insert(a,3,[11,12],axis=0))
# 沿1轴广播
print(np.insert(a,2,[11,12,13],axis=1))

在这里插入图片描述

2.数组的删除

a = np.arange(12).reshape(3,4)
print(a)

#未传递axis参数,在删除之前输入数组会被展开为一维数组
print(np.delete(a,3))
#传递axis参数
print(np.delete(a,2,axis=0)) #删除第3行
print(np.delete(a,3,axis=1))  #删除第4列

在这里插入图片描述

import numpy as np
score =  np.array([[1,4,7],[2,5,8],[3,6,9]])
a = np.array([[1,4],[2,5],[3,6]])
print(score)
print(a)

np.dot(score,a)

在这里插入图片描述

八、numpy的计算

import numpy as np

score = np.array([[80,88],[82,81],[75,80]])
print(score)
#获取火灾数据最大值
result = np.max(score)
print(result)
#获取某一轴上的数据最大值
result = np.max(score,axis=0)
print(result)
#获取火灾数据最小值
result = np.min(score)
print(result)
#求平均值
result = np.mean(score,axis=0)
print(result)

在这里插入图片描述

九、数组中的Nan和Inf

inf表示无穷大,nan表示缺失的数据
nan和任何数计算都为nan
a = np.array([[80,88],[np.inf,np.nan],[np.nan,80]])
print(a)
# 判断数组中非零的个数
print(np.count_nonzero(a))
# 将第0行第1列的数改为nan
a[0,1] = np.nan
print(a)

在这里插入图片描述

十、二维数组的转置

a = np.arange(12).reshape(3,4)
print(a)
print(a.T)

在这里插入图片描述

十一、总结

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐