NumPy数组详解


Numpy 是 Python 中科学计算的核心库,NumPy 这个词来源于 Numerical 和 Python 两个单词。它提供了一个高性能的多维数组对象,以及大量的库函数和操作,可以帮助程序员轻松地进行数值计算,广泛应用于机器学习模型、图像处理和计算机图形学、数学任务等领域。

一、Numpy数组的生成

(1)生成一般数组array()函数

import numpy as np
# 生成一般数组array()函数
# 传入一个列表
print(np.array([1,2,3,4,5]))
# 传入一个元祖
print(np.array((1,2,3,4,5)))
# 传入一个嵌套列表
print(np.array([[1,3,5,7],[2,4,6,8]]))

(2)生成特殊类型的数组

# 生成特殊类型的数组
# np.arange(start,stop,step) 不包括stop
print(np.arange(1,10,2))
print(np.arange(10))
# 生成指定形状全为0的数组 用到zeros函数
print(np.zeros(3))
# 生成长度为2行3列全为0的数组
print(np.zeros((2,3)))
# 生成指定形状全为1的数组 ones
print(np.ones(3))
# 生成长度为2行3列全为1的数组
print(np.ones((2,3)))
# 生成一个正方形单位矩阵
# 生成一个3x3的单位矩阵
print(np.eye(3))

(3)生成随机数数组

# np.random.rand()方法,主要用于生成(0,1)之间的随机数组
print(np.random.rand(4))

# np.random.randn()方法用来生成满足正态分布的指定形状数组
# 生成长度为5的满足正太分布的数组
print(np.random.randn(5))
# 生成长度为2行3列的满足正太分布的数组
print(np.random.randn(2,3))

# np.random.randint()方法与np.arange()方法类似,用于生成一定范围内的随机数
# 生成在区间[2,9)长度的5的数组
print(np.random.randint(2,9,5))
# 在区间[0,5)上生成长度为10的数组
print(np.random.randint(5,size=10))
# 在区间[0,5)上生成长度为2行3列的数组
print(np.random.randint(5,size=(2,3)))

# np.random.choice()方法主要用来从已知数组中随机选取相应大小的数组
# 从数组a中选取3个值组成一个数组
print(np.random.choice(5,3))

# np.random.shuffle()方法主要用来将原数组打乱

二、Numpy数组的基本属性

(1)数组的形状

# 数组的形状
import numpy as np
arr= np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
print(arr.shape)

(2)数组的大小

# 数组的大小
print(arr.size)

(3)数组的类型

# 数组的类型
print(arr.dtype)

(4)数组的维数

# 数组的维数
print(arr.ndim)

三、Numpy数组的数据选取

(1)一维数据选取

import numpy as np
arr = np.arange(10)
print(arr)
# 一维数据选取
# 传入某个位置
print(arr[3])
# 获取末尾最后一个数据
print(arr[-1])
# 获取末尾倒数第二个数据
print(arr[-2])

# 传入某个区间
# 获取3到5为位置但不包含5
print(arr[3:5])
# 获取3以后所有的数组
print(arr[3:])
# 获取3以前所有的数组
print(arr[:3])
# 获取3到倒数第二的数组,但不包含倒数第二
print(arr[3:-2])

# 传入某个条件
print(arr[arr>3])

(2)多维数据选取

# 多维数据的选取
arr1= np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1)
# 获取某行数据
# 获取第二行数据
print(arr1[1])
# 获取某些行数据
print(arr1[1:3])
# 获取某列数据
# 获取第二2列数据
print(arr1[:,1])
# 上述代码逗号之前用来指明行位置,逗号之后用来指明列位置,当逗号之前是一个冒号时,表示获取所有的行
# 获取某些列数据,获取第一到第三列的数据,不包括第三列
print(arr1[:,0:2])
# 同时获取
# 获取第1到第2行,第二到第3列的数据
print(arr1[0:2,1:3])

四、Numpy数组的数据预处理

(1)numpy数组的类型转换

import numpy as np
arr = np.arange(10)
print(arr)
# numpy数组的类型转换
# 从int型转换为float型
print(arr.dtype)
arr1 = arr.astype(np.float64)
print(arr1.dtype)
# 从int型转换为str型
arr2 = arr.astype(np.string_)
print(arr2.dtype)

(2)numpy数组缺失值的处理

# numpy数组缺失值的处理
# 创建一个含有缺失值的数组
arr3 = np.array([1,2,np.nan,4])
# 第三位为缺失值
print(np.isnan(arr3))
# 用0填充
arr3[np.isnan(arr3)]=0
print(arr3)

(3)numpy数组的重复值处理

# numpy数组的重复值处理
arr4 = np.array([1,2,4,4,5])
print(np.unique(arr4))

五、Numpy数组的重塑

(1)一维数组的重塑

# 数组重塑就是更改数组的形状
# 一维数组的重塑:从一行或一列数组重塑为多行多列
import numpy as np
arr = np.arange(8)
print(arr)
# 重塑成2行4列
print(arr.reshape(2,4))
# 重塑成4行2列
print(arr.reshape(4,2))

(2)多维数组的重塑

# 多维数组的重塑
# 新建一个多维数组
arr1 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr1)
# 将数组重塑为4行3列
print(arr1.reshape(4,3))
# 将数组重塑为2行6列
print(arr1.reshape(2,6))

(3)数组转置

print(arr1.T)

六、Numpy数组的合并

(1)数组的横向合并

# 横向合并
# 先创建两个数组
import numpy as np
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[7,8,9],[10,11,12]])
# concatenate方法直接将两个待合并的数组以列表的形式传给concatenate方法,axis=1表示在行方向进行合并
print(np.concatenate([arr1,arr2],axis=1))
# hstack方法直接将两个待合并的数组以元祖的形式传给stack方法,不需要设置axis参数
print(np.hstack((arr1,arr2)))
# column_stack方法与hstack方法一样
print(np.column_stack((arr1,arr2)))

(2)数组的纵向合并

# 纵向合并
# concatenate方法直接将两个待合并的数组以列表的形式传给concatenate方法,axis=0表示在列方向进行合并
print(np.concatenate([arr1,arr2],axis=0))
# vstack方法直接将两个待合并的数组以元祖的形式传给stack方法,不需要设置axis参数
print(np.vstack((arr1,arr2)))
# row_stack方法与vstack方法一样
print(np.row_stack((arr1,arr2)))

七、Numpy数组的常用数据分析函数

(1)元素级函数

'''
元素级函数:就是对数组中每个元素执行相同的函数操作
abs取每个元素的绝对值
sqrt取每个元素的平方根
square取每个元素的平方
exp计算各个元素的以e为底的指数
log,log10,log2,log1p求对数
modf适用于浮点数
isnan判断是否NaN
'''
import numpy as np
arr = np.arange(5)
print(np.square(arr))
print(np.sqrt(arr))

(2)描述统计级函数

'''
描述统计级函数
sum求和
mean平均值求取
std,var标准差和方差
min,max最大最小值
argmin,argmax最小值和最大值的索引
cumsum所有元素的累计和,结果以数组的形式返回
cumprod所有元素的累计积
'''
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1)
# 求和
# 对整个数组求和
print(arr1.sum())
# 对数组中的每一行分别求和
print(arr1.sum(axis=1))
# 对数组中的每一列分别求和
print(arr1.sum(axis=0))

# 求均值
# 对整个数组均值
print(arr1.mean())
# 对数组中的每一行分别求均值
print(arr1.mean(axis=1))
# 对数组中的每一列分别求均值
print(arr1.mean(axis=0))

# 求最值
# 对整个数组最大
print(arr1.max())
# 对数组中的每一行分别求最大值
print(arr1.max(axis=1))
# 对数组中的每一列分别求最大值
print(arr1.max(axis=0))

(3)条件函数

'''
条件函数
'''
# 新建一个数组用来存储学生成绩
arr2 = np.array([56,61,65])
# 大于60及格,小于60不及格
print(np.where(arr2>60,'及格','不合格'))
#返回满足条件对应的位置
print(np.where(arr2>60))

(4)集合关系

'''
集合关系
'''
arr3 = np.array([1,2,3,4])
arr4 = np.array([1,2,5])
# 包含
print(np.in1d(arr3,arr4))
# 交集
print(np.intersect1d(arr3,arr4))
# 并集
print(np.union1d(arr3,arr4))
# 差集
print(np.setdiff1d(arr3,arr4))

以上内容仅供参考学习,如有侵权请联系我删除!

发布了69 篇原创文章 · 获赞 7 · 访问量 3342

猜你喜欢

转载自blog.csdn.net/weixin_45366499/article/details/104237859
今日推荐