Numpy扩展包的基本使用

本文详细介绍Numpy库的基础操作,包括数组创建、属性介绍、运算方式等,并通过实例演示了Numpy的强大功能,如条件索引、数组切片、数据类型转换及各种数学统计函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么要使用Numpy?

下面用一个小小的例子来说明下,比如现在有两个列表,每个列表内的元素个数相同,现在要求两个列表中的每个元素一一对应相乘进行运算,把计算结果放到新列表中

常规写法

#现在2两个列表,且每个列表元素个数相同,要求两个列表内的每个元素一一对应进行相乘运算,并把所有结果放到一个新的列表3中
list_1 = [1,2,3,4,5]
list_2 = [1,2,3,4,5]
list_3 = []
#取列表长度作为for循环次数
for x in range(len(list_1)):
    res = list_1[x]*list_2[x]
    list_3.append(res)
print(list_3)  #输出结果[1, 4, 9, 16, 25]

使用Numpy写法

#导入numpy这个包并起别名np,方便写
import numpy as np
#创建2个数组
arr_1 = np.arange(10)  #输出结果[0 1 2 3 4 5 6 7 8 9]
arr_2 = np.arange(10)  #输出结果[0 1 2 3 4 5 6 7 8 9]
#两个数组直接进行计算并把结果给数组3
arr_3 = arr_1*arr_2
#输入结果
print(arr_3)  #输出结果[ 0  1  4  9 16 25 36 49 64 81]

从上面这个小小的例子就可以看出来了,是很方便的,当然,Numpy不止这些,还有其他很多方便的地方

2.Numpy中的数组属性

在Numpy中所有的数组都为对象ndarray,大致属性为一下几种

ndarray.ndim    返回数组对象的维度的个数,数组的维度数量被称为rank

ndarray.shape    返回一个元组,表示每个维度中数组的大小

ndarray.dtype    返回数组对象的数据类型

ndarray.size    返回数组的所有数据个数,相等于shape的元素的乘积

ndarray.itemsize    返回数组中每个数据的字节长度

3.创建数组的几种方法

1>第一种,可以把python中的列表转换为数组

#创建一维数组
#创建python中的普通列表
list_1 = [1,2,3,4,5]
#使用np(numpy)中的array来转换
arr_1 = np.array(list_1)
print(arr_1)   #输出结果[1 2 3 4 5]


#创建二维数组
#创建两个python中普通列表
list_2 = [1,2,3]
list_3 = [4,5,6]
#使用array转换
arr_2 = np.array([list_2,list_3])
print(arr_2)  #输入结果[[1 2 3][4 5 6]]

2>第二种,使用numpy.arange()创建

#使用numpy.arange()创建一个一维数组
arr = np.arange(5)
print(arr)   #输出结果[0 1 2 3 4]

3>第三种,使用numpy.random.rand()创建一个指定维度数的随机数组

#numpy.random.rand(d1,d2,d3,d4,d5,d6...dn) n维数组

#创建一个一维数组
arr = np.random.rand(1)
print(arr)  #输出结果[ 0.07781411]

#创建一个二维数组
arr = np.random.rand(2,2)
print(arr)  #输出结果[[ 0.04608068  0.63958486][ 0.6734346   0.37702904]]

#创建一个三维数组
arr = np.random.rand(1,1,1)
print(arr)  #输出结果[[[ 0.25641335]]]

4>第四种,使用zeros()函数创建数组,数据都是以0开头

        参数1shape:空数组的形状,整数或整数元祖

        参数2dtype:数组数据类型

        参数3order: 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

#使用zeros()函数创建
arr = np.zeros(5)
print(arr)  #输出结果[ 0.  0.  0.  0.  0.]

arr = np.zeros((2,2))
print(arr)  #输出结果[[ 0.  0.][ 0.  0.]]

#没有指定数据类型默认都为float
arr = np.zeros((2,2),dtype=int)  #指定数据类型后,现在类型为int
print(arr)  #输出结果[[0 0][0 0]]  

5>第五种,使用ones()函数创建数组,数据都是以1开头

        参数1shape:空数组的形状,整数或整数元祖

        参数2dtype:数组数据类型

        参数3order: 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

#使用ones()函数创建
arr = np.ones(5)
print(arr)  #输出结果[ 1.  1.  1.  1.  1.]

arr = np.ones((2,2))
print(arr)  #输出结果[[ 1.  1.][ 1.  1.]]

#没有指定数据类型默认都为float
arr = np.ones((2,2),dtype=int)
print(arr)  #输出结果[[1 1][1 1]]

6>第六种,使用empty()函数来创建数组

        参数1shape:空数组的形状,整数或整数元祖

        参数2dtype:数组数据类型

        参数3order: 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

#使用empty()函数来创建数组
arr = np.empty(5)
print(arr)  #输出结果[ 1.  1.  1.  1.  1.]

arr = np.empty((2,2))
print(arr)  #输出结果[[ 1.  1.][ 1.  1.]]

arr = np.empty((2,2),dtype=int)
print(arr)  #输出结果[[0 1][2 3]]

因为数组的元素没有初始化,所以为随机值

empty和zeros不一样,不会将数组值设置为0,因此可能会快一点,另一方面,它要求用户手动设置数组中的所有值,并且应谨慎使用。

7>第七种,使用identity()函数创建对角线为1的数据

#使用identity()创建对角线为1的数组
arr = np.identity(5,dtype=int)
print(arr)
#输出结果
#[[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]]

4.数组的数据类型指定与数据类型转换

1>指定数组的数据类型

#指定数组数据的数据类型
#创建数组,指定数据类型为int
arr = np.zeros((3,3),dtype=int)
print(arr)  #输出结果[[0 0 0][0 0 0][0 0 0]]
print(arr.dtype)  #输出结果int32

2>使用astype转换数组的数据类型

#使用astype()函数转换数据类型
#创建一个数组,类型为float
arr = np.array([[1.5,1.6],[1.55,1.25],[1.96,1.88]])
print(arr)  #输出结果[[ 1.5   1.6 ][ 1.55  1.25][ 1.96  1.88]]
print(arr.dtype)  #输出结果float64
#使用astype()转换
arr_int = arr.astype(np.int)
print(arr_int)  #输出结果[[1 1][1 1][1 1]]
print(arr_int.dtype)  #输出结果int32

主要:转换为int型,只保留整数部分

5.数组与数组之间的计算

# 数组的运算
arr = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[4,5,6],[7,8,9]])
# 乘法运算   会把运算作用数组中的每一个元素中
print('乘法运算',arr*3)  #输出结果[[ 3  6  9][12 15 18]]

# 乘方
print('乘方运算',arr**2)  #输出结果[[ 1  4  9][16 25 36]]

# 矩阵(数组)加减乘除运算
print(arr+arr2)  #输出结果[[ 5  7  9][11 13 15]]
print(arr-arr2)  #输出结果[[-3 -3 -3][-3 -3 -3]]
print(arr/arr2)  #输出结果[[ 0.25        0.4         0.5       ][ 0.57142857  0.625       0.66666667]]
print(arr*arr2)  #输出结果[[ 4 10 18][28 40 54]]

6.数组的条件索引

#单个条件
#创建一个数组
arr_1 = np.arange(10)  
print(arr_1)  #输出结果[0 1 2 3 4 5 6 7 8 9]
arr_is_ok = arr_1>=5  #以此判断arr_1中的数据>=5,并把布尔结果放在新数组
print(arr_is_ok)  #输出结果[False False False False False  True  True  True  True  True]
#筛选出所有大于等于5的数组放在arr_2中
arr_2 = arr_1[arr_is_ok]
print(arr_2)  #输出结果[5 6 7 8 9]


#多个条件,并且每个条件都同时成立,每个条件用括号括起来
arr_is_ok = (arr_1>=5)&(arr_1%2==0)
print(arr_is_ok)  #输出结果[False False False False False False  True False  True False]
#筛选出所有为True的数据
arr_2 = arr_1[arr_is_ok]
print(arr_2)  #输出结果[6 8]


#多个条件,只要有一个条件成立即可
arr_is_ok = (arr_1>=5)|(arr_1%2==0)
print(arr_is_ok)  #输出结果[ True False  True False  True  True  True  True  True  True]
#筛选出所有为True的数据
arr_2 = arr_1[arr_is_ok]
print(arr_2)  #输出结果[0 2 4 5 6 7 8 9]

7.数组的切片

#数组的切片,依然从索引0开始
#一维数组切片
arr = np.arange(10)
print(arr)  #输出结果[0 1 2 3 4 5 6 7 8 9]
print(arr[2:5])  #输出结果[2 3 4]
print(arr[:5])  #输出结果[0 1 2 3 4]
print(arr[5:])  #输出结果[5 6 7 8 9]
print(arr[2::2])  #输出结果[2 4 6 8]
#二维数组切片
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(arr)  #输出结果[[ 1  2  3  4  5][ 6  7  8  9 10]]
#取出4的值
print(arr[0][3])
#取出10的值
print(arr[1][4])

8.使用reshape()函数转换数组维数,一维转多维,多维转一维

转换后的数组数据个数必须等于转换之前一维数组的数据个数

#使用reshape()函数将一维数组转换为多维数组
#声明一个一维数组
arr = np.arange(10)
print(arr)  #输出结果[0 1 2 3 4 5 6 7 8 9]
#使用reshape()转换
new_arr = arr.reshape(2,5)
print(new_arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
new_arr = arr.reshape(5,2)
print(new_arr)  #输出结果[[0 1][2 3][4 5][6 7][8 9]]

#使用reshape()函数将多维数组转换为一维数组
arr = new_arr.reshape(10)
print(arr)  #输出结果[0 1 2 3 4 5 6 7 8 9]

9.数组的转置,使用transpose()函数

#数组的转置
arr_1 = np.random.rand(2,5)
print(arr_1)  #输出结果[[ 0.23108528  0.71822154  0.48542061  0.86062775  0.93285996][ 0.93597528  0.82592221  0.28738888  0.923042    0.15797056]]
print(arr_1.ndim)  #输出结果2
print(arr_1.shape)  #输出结果(2,5)

#使用transpose()函数转置
arr_2 = arr_1.transpose()
print(arr_2)
print(arr_2.ndim)  #输出结果2
print(arr_2.shape)  #输出结果(5, 2)

10.Numpy中的函数

1>通用函数

(1)ceil()函数--->向上取整

#随机生成一个多维数组
arr = np.random.rand(2,3)
print(arr)  #输出结果[[ 0.93034735  0.473756    0.69833583][ 0.82455146  0.33916689  0.15263583]]
#使用celi()函数向上取整
arr = np.ceil(arr)
print(arr)  #输出结果[[ 1.  1.  1.][ 1.  1.  1.]]

(2)floor()函数--->向下取整

#随机生成一个多维数组
arr = np.random.rand(2,3)
print(arr)  #输出结果[[ 0.93034735  0.473756    0.69833583][ 0.82455146  0.33916689  0.15263583]]
#使用celi()函数向上取整
arr = np.floor(arr)
print(arr)  #输出结果[[ 0.  0.  0.][ 0.  0.  0.]]

(3)rint()函数--->四舍五入

#随机生成一个多维数组
arr = np.random.rand(2,3)
print(arr)  #输出结果[[ 0.93034735  0.473756    0.69833583][ 0.82455146  0.33916689  0.15263583]]
#使用celi()函数向上取整
arr = np.rint(arr)
print(arr)  #输出结果[[ 1.  0.  1.][ 1.  1.  0.]]

(4)isnan()函数--->判断数组数据是否为空

#随机生成一个多维数组
arr = np.random.rand(2,3)
print(arr)  #输出结果[[ 0.93034735  0.473756    0.69833583][ 0.82455146  0.33916689  0.15263583]]
#使用celi()函数向上取整
arr = np.isnan(arr)
print(arr)  #输出结果[[False False False][False False False]]

(5)multiply()函数--->相乘函数

#创建2个数组
arr_1 = np.array([[1,2,3,4],[5,6,7,8]])
arr_2 = np.array([[1,2,3,4],[5,6,7,8]])
arr_3 = np.multiply(arr_1,arr_2)
print(arr_3)  #输出结果[[ 1  4  9 16][25 36 49 64]]
(6)divide()函数--->相除函数
#创建2个数组
arr_1 = np.array([[1,2,3,4],[5,6,7,8]])
arr_2 = np.array([[1,2,3,4],[5,6,7,8]])
arr_3 = np.divide(arr_1,arr_2)
print(arr_3)  #输出结果[[ 1.  1.  1.  1.][ 1.  1.  1.  1.]]

2>统计函数

(1)sum()--->相加函数

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.sum(arr))  #输出结果45

(2)mean()--->平均数

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.mean(arr))  #输出结果4.5
(3)max()--->最大值
#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.max(arr))  #输出结果9

(4)min()--->最小值

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.min(arr))  #输出结果0

(5)var()--->计算方差

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.var(arr))  #输出结果8.25

(6)std()--->计算标准差

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.std(arr))  #输出结果2.87228132327

(7)argmax()--->最大值索引

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.argmax(arr))  #输出结果9

(8)argmin()--->最小值索引

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.argmin(arr))  #输出结果0

(9)cumsum()--->累加计算

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.cumsum(arr))  #输出结果[ 0  1  3  6 10 15 21 28 36 45]

(10)cumprod()--->累乘计算

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]
print(np.cumprod(arr))  #输出结果[0 0 0 0 0 0 0 0 0 0]

3>条件函数

1>where()函数

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]

arr = np.where(arr>=5,True,False)
print(arr)  #输出结果[[False False False False False][ True  True  True  True  True]]

2>any()函数

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]

arr = np.any(arr>=5)
##表示数组中至少有一个符号条件的元素,返回True,否则返回False
print(arr)  #输出结果

3>all()函数

#随便创建一个数组
arr = np.arange(10).reshape(2,5)
print(arr)  #输出结果[[0 1 2 3 4][5 6 7 8 9]]

arr = np.all(arr>=5)
#表示数组中的元素必须全部符合条件,返回True,否则返回False
print(arr)  #输出结果False
4>unique()函数
#随便创建一个数组
arr_1 = np.array([[1,3,4,5,6],[2,3,4,6,9]])
arr = np.unique(arr_1)
#返回数组中的唯一值,返回一个排好序的一维数组
print(arr)  #输出结果[1 2 3 4 5 6 9]






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值