python numpy看这一篇就够了

本文详细介绍了Python中的科学计算库Numpy,包括ndarray多维数组的使用、生成随机数和序列、数据类型、矩阵运算、索引切片、转置、nan和inf的处理、数组拼接、行列交换以及更多实用功能,是学习Numpy的全面指南。

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

numpy基础

1.为什么要学习numpy?
-> 快速
-> 方便
-> 科学计算的基础库
2.什么是numpy?
一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算。
3. 如何在python中使用numpy?

import numpy as np

ndarray 多维数组(N Dimension Array)

NumPy数组是一个多维的数组对象(矩阵),称为ndarray,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。

ndarray拥有的属性
-> ndim属性:维度个数
-> shape属性:维度大小
-> dtype属性:数据类型

numpy生成随机数

# 导入numpy,别名np
import numpy as np

# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维),rand固定区间0.0 ~ 1.0
arr = np.random.rand(3, 4)
print(arr)
print(type(arr))

# 生成指定维度大小(3行4列)的随机多维整型数据(二维),randint()可以指定区间(-1, 5)
arr = np.random.randint(-1, 5, size = (3, 4)) # 'size='可省略
print(arr)
print(type(arr))

# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维),uniform()可以指定区间(-1, 5)
arr = np.random.uniform(-1, 5, size = (3, 4)) # 'size='可省略
print(arr)
print(type(arr))

print('维度个数: ', arr.ndim)
print('维度大小: ', arr.shape)
print('数据类型: ', arr.dtype)

在这里插入图片描述

numpy生成序列

1. np.array(collection) 和 np.arange( )

以下 a,b,c内容相同
a = np.array([1,2,3,4])
b = np.array(range(1,5))
c = np.arange(1,5)

2.np.zeros()
指定大小的全0数组。注意:第一个参数是元组,用来指定大小,如(3, 4)。

np.zeros((3,4))

3. np.ones()
指定大小的全1数组。注意:第一个参数是元组,用来指定大小,如(3, 4)。

np.ones((3,4))

4.np.random.shuffle() 和 reshape()
random.shuffle() 将打乱数组序列(类似于洗牌)。

arr = np.arange(15).reshape(3,5)
print(arr)

np.random.shuffle(arr)
print(arr)

ndarray的数据类型

1. dtype参数
指定数组的数据类型,类型名+位数,如float64, int32
2. astype方法
转换数组的数据类型

# 初始化3行4列数组,数据类型为float64
a = np.zeros((3, 4), dtype=np.float64)
print(a.dtype)

# astype转换数据类型,将已有的数组的数据类型转换为int32
a_int = a.astype(np.int32)
print(a_int.dtype)

在这里插入图片描述

ndarray的矩阵运算

1. 矢量运算:相同大小的数组间运算应用在元素上

# 矢量与矢量运算
arr = np.array([[1, 2, 3],
                [4, 5, 6]])

print("元素相乘:")
print(arr * arr)

print("矩阵相加:")
print(arr + arr)

2. 矢量和标量运算:“广播” - 将标量"广播"到各个元素

# 矢量与标量运算
print(1. / arr)
print(2. * arr)
print(arr + 1)

3.矢量和矢量运算:广播原则
在这里插入图片描述

举个例子,也就是说,
shape为(3,3,3)的数组能够和(3,2)的数组,进行计算么?
No.
shape为(3,3,2)的数组能够和(3,2)的数组进行计算么?
Yes.

a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]])  # 2行6列
b = np.array([1,2,3,4,5,6])    # 1行6列
print(a - b)
print(a * b)

ndarray的索引与切片

1. 一维数组的索引与切片
与Python的列表索引功能相似

# 一维数组
arr1 = np.arange(10)
print(arr1)
print(arr1[2:5])

运行结果:

[0 1 2 3 4 5 6 7 8 9]
[2 3 4]

2. 多维数组的索引与切片:

在这里插入图片描述
在这里插入图片描述
3. numpy中数值的修改
在这里插入图片描述
4. 条件索引

  1. 把t中小于10的数字替换为0
t[t<10] = 0

在这里插入图片描述
2.把t中小于10的数字替换为0,把大于10的替换为10

np.where(t<10,0,10)   #利用三元运算符

在这里插入图片描述
3. 小于10的替换为10,大于18的替换为18

t.clip(10,18)

在这里插入图片描述

numpy中的转置

可通过以下三种方法进行转置操作:

  1. a. transpose()
  2. a.T
  3. a.swapaxes(1,0)

在这里插入图片描述

numpy中的nan和inf

1.nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan:
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

2.inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf,+inf)
比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)

3.那么如何指定一个nan或者inf呢?

  1. 注意他们的type类型 : nan 或 inf 为 float类型
    在这里插入图片描述
  2. np.nan != np.nan 利用这个特性,我们可以通过 np.count_nonzero(t != t)来统计数组中nan的个数
    在这里插入图片描述

ndarry缺失值填充均值

在这里插入图片描述

for i in range(t.shape[1]):
	nan_num = np.count_nonzero(t[:,i] != t[:i])  # 计算nan的个数
	if nan_num > 0:
		col_sum = t[:,i][np.isnan(t[:,i]) == False].sum() # 求和
		col_mean = col_sum / (t.shape[0] - nan_num) #求每一列的均值
		t[:,i][np.isnan(t[:,i])] = col_mean  #替换

数组的拼接

在这里插入图片描述

数组水平或者竖直拼接很简单,但是拼接之前应该注意什么?
竖直拼接的时候:每一列代表的意义相同!!!否则牛头不对马嘴

如果每一列的意义不同,这个时候应该交换某一组的数的列,让其和另外一类相同

那么问题来了?
如何交换某个数组的行或者列呢?

数组的行列交换

在这里插入图片描述

numpy中更多好用的方法

1.获取最大值最小值的位置

  np.argmax(t,axis=0)
  np.argmin(t,axis=1)

2.求和,平均值

np.mean(arr)
np.sum(arr)

3.求最大值,最小值

np.max(arr) 
np.min(arr)

3.求标准差,方差

np.std()
np.var()

4.多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

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

print(np.sum(arr, axis=0)) # 数组的按列统计和

print(np.sum(arr, axis=1)) # 数组的按行统计和

5.判断函数

np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True

arr = np.random.randn(2,3)
print(arr)

print(np.any(arr > 0))
print(np.all(arr > 0))

运行结果:

[[ 0.05075769 -1.31919688 -1.80636984]
 [-1.29317016 -1.3336612  -0.19316432]]

True
False

6.元素去重排序函数

np.unique():找到唯一值并返回排序结果,类似于Python的set集合

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

print(np.unique(arr))

运行结果:

[[1 2 1]
 [2 3 4]]

[1 2 3 4]

numpy读取数据

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值