numpy简单使用

这篇博客介绍了numpy库在数据分析中的基本应用,包括数组数据类型、创建方法、索引切片、花间索引、布尔索引、运算符的使用,以及数学和统计函数,还有随机数模块的讲解。

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

# 身高
height = [170,173,178,180,183]
# 体重
weight = [76,65,70,77,75]
'''求BMI指数:身体质量指数=体重(KG)/身高(m)的平方'''


# 这道题如果你真的想用python实现会稍微复杂一点
data_list = []
for i in range(5):
    data_list.append(weight[i]/((height[i]/100)**2))
data_list  # 在notebook环境下直接输变量名就等价于是打印操作


# 先将python里面的列表转换成numpy中的数组
w = np.array(weight)
h = np.array(height)
# 直接利用数组的数学运算
res = w/(h/100)**2
res

"""
1.numpy数组能够直接数学快速运算
2.numpy的数学计算速度要比python快N多倍
"""

# 速度展示
import time
import random
# python实现1千万人BMI计算
# 伪造数据
h = []
w = []
for i in range(10000000):
    h.append(random.randint(153,180))
    w.append(random.uniform(51,88))
# for循环计算
start_time = time.time()
bmi = []
for i in range(10000000):
    bmi.append(w[i]/(h[i]/100) ** 2)
print(time.time() - start_time)
# 3.38秒


H = np.array(h)
W = np.array(w)
start_time = time.time()
# 数组运算
BMI = W/(H/100)**2
print(time.time() - start_time)
# 0.09秒

数组

numpy中的数组与python中的列表对比
[1,2,3,4,5]  # 列表
res = np.array([1,2,3,4,5])
print(res)
# 结果:array([1, 2, 3, 4, 5])  # 数组

数组分类
1.一维数组(常用)
	ar1 = np.array([1,2,3,4,5,6,7,8,9])
	array([1, 2, 3, 4, 5, 6, 7, 8, 9])
	
2.二维数组(频繁)
	ar2 = np.array([[1,2,3,4,5] , [6,7,8,9,10]])
    array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])
       
3.三维数组(少用)
	ar3 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
    array([[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]]])
"""
数组既可以使用python的列表创建也可以使用python元组创建
"""

numpy中的数据类型

虽然numpy仅仅是python的一个模块,但是它有自己的数据类型
由于numpy主要是用来计算的,所以基本上都是数字相关的数据类型
布尔型			bool_	
整型			int_ int8 int16 int32 int64
	int32只能表示(-2**312**31-1),因为它只有32个位,只能表示2**32个数
无符号整型	   uint8 uint16 uint32 uint64	
浮点型			float_ float16 float32 float64	
复数型			complex_ complex64 complex128
"""
numpy中的数据类型名称为了避免跟python冲突
所有同名的数据类型名称都会在最后加下划线
"""

数组的特点
	1.数组内所有的元素肯定是相同的数据类型
    2.数组的大小无法修改
    3.数组的数学运算默认都是挨个元素挨个元素逐一运算
    	a = array([1,2,3])
    	a + 1  # array([1+1,2+1,3+1])
     4.数组之间做运算一定要确保彼此之间列相同 

常用方法

# T 数组的转置(对高维数组而言)
li1 = [
      [1,2,3],
      [4,5,6]
  ]  
a = np.array(li1)  # 二维数组(两行三列) 
a.T  # 转置(三行两列)
"""
a.T
array([[1, 4],
       [2, 5],
       [3, 6]])

a
array([[1, 2, 3],
       [4, 5, 6]])
"""

# dtype 数组元素的数据类型
a.dtype

# size 数组元素的个数(常用)
a.size

# ndim 数组的维数
ar1 = np.array([1,2,3,4])
ar1.ndim

# shape 以元组形式获取行数和列数(常用)
a.shape

# reshape 修改数组大小(行列)
a.reshape(1,6)
a.reshape(3,2)

创建方式

# array()  在创建数组的时候可以修改数据类型
l = [1,2,3]
res = np.array(l,dtype='float')  
res.dtype

# arange()   range的numpy版,支持浮点数
np.arange(0,10,2)  # array([0, 2, 4, 6, 8])  步数为2
np.arange(1.2,2.2,0.4)  # array([1.2, 1.6, 2. ])	步数为0.4

# linspace() 类似arange(),第三个参数为数组长度
np.linspace(1,10,20)  
# 在1到10之间生成的二十个数每个数字之间的距离相等

# zeros()根据指定形状和dtype创建全0数组
np.zeros((2,3),dtype='int')  # 快速创建数组
					 'float'

# ones() 根据指定形状和dtype创建全1数组
np.ones((3,3),dtype='int')  

# empty() 根据指定形状和dtype创建空数组(随机值)
np.empty((3,3))

# eye() 根据指定边长和dtype创建单位矩阵
np.eye(5,5)

索引、切片

'''一维数组与列表在索引和切片上的操作一致'''
# 列表
# l = [13,19,22,14,19,11]
# l[1]  # 19
# l[-1]  # 11
# l[1:3]  # [19, 22]
age = np.array([13,19,22,14,19,11])
age[1]  # 19
age[-1]  # 11
age[1:3]  # array([19, 22])

'''二维数组在索引和切片上有新的知识'''
ar2 = np.array([[1,2,3,4],[6,7,8,9],[22,33,44,55]])

ar2[1,2]  # 8
# 针对二维数组有行索引和列索引  ar2[行索引,列索引]

# 切片
# 获取2 3 7 8 
ar2[0:2,1:3]  # ar2[行切片,列切片]

# 冒号左右不写数字表示所有
ar2[1:,]

花间索引(间断索引)

# 一维数组

ar1 = np.array([11,22,33,44,55,66,77])
# 获取元素11 33 44 77(没有任何规律)
ar1[[0,2,3,6]]  # ar1[[索引1,索引2,索引3...]]

布尔索引(逻辑索引)

age = np.array([13,19,22,14,19,11,55,78,22,16])
# 筛选出年龄大于18岁的数据
age>18  # 依次判断每个元素是否大于18
# 布尔值索引(逻辑索引)
age[age>18]   # 数组[条件]

运算符

+ - * /
% 数组对应元素商的元素
// 数组对应元素商的整除数
** 数组对应元素的幂指数

比较运算符
>
 np.greater(arr1,arr2)
>=
 np.greater_equal(arr1,arr2)
<
np.less(arr1,arr2)
<=
np.less_equal(arr1,arr2)
==
np.equal(arr1,arr2)
!= 
np.not_equal(arr1,arr2)

数学函数 对数组数据进行数学函数运算

# 常用的数学函数
  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为底各元素的对数

***统计函数 √

res = 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(res)  # 等价 res.min()
# 求数组里面最大的数
np.max(res)  # 等价 res.max()
# 求数组里面所有元素的平均值
np.mean(res)  # 等价 res.mean()
# 求数组里面所有元素的和
np.sum(res)  # 等价 res.sum()
# 求数组里面所有元素的中位数
np.median(res)  # 等价 res.median()
# 求数组里面所有元素的标准差
np.std(res)  # 等价 res.std()
# 求数组里面所有元素的方差
np.var(res)  # 等价 res.var()

'''复杂需求:以行列为单位'''
#######################################
# axis 参数就是用来控制行列的
# 0表示列 1表示行
#######################################
# 求每一列的最小值
np.min(res,axis=0)  # res.min(axis=0)
# 求每一行的最大值 
np.min(res,axis=1)  # res.max(axis=1)

'''不借助与axis参数'''
# 不使用axis参数
# 计算每一行的和
for i in range(res.shape[0]):
	# 取出每一行数据再用统计函数即可
	print(np.sum(res[i]))
    
# 计算每一列的平均
for j in range(res.shape[1]):
    # 取出每一列数据再用统计函数即可
    print(np.mean(res[:,j]))

随机数模块

# 跟python里面的random模块用法一致
 import random
# random.random
# rand  给定形状产生随机数组(0到1之间的数)
np.random.rand(3,3)  

# randint(整数范围,size=(行数,列数))
np.random.randint(4,size=(3,3))

# choice  (整数范围,选择的个数)
np.random.choice(10,2)

# shuffle  与random.shuffle相同(随机打乱元素位置)
res = [1,2,3,4]
res1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.random.shuffle(res1)
res1

# uniform (起始位置数,终止位置数,个数)
np.random.uniform(0,10,100)

# normal  随机正态分布
np.random.normal(1,5,100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值