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))





相关文章
|
2月前
|
索引 Python
NumPy 教程 之 Numpy 数组操作 28
NumPy 提供多种数组操作功能,包括修改形状、翻转、连接和分割等。本教程重点介绍元素的添加与删除,如使用 `resize`、`append`、`insert` 和 `delete` 函数。其中 `numpy.insert` 可在指定索引前插入值,支持标量或数组插入。示例展示了不同情况下 `insert` 的使用方法,包括不指定轴时的数组扁平化插入,以及沿特定轴进行广播插入。
32 2
|
2月前
|
数据处理 索引 Python
NumPy 数组操作:和普通操作相较,到底蕴含着怎样令人费解的独特魅力?
【8月更文挑战第19天】NumPy是Python科学计算核心库,提供高效数组操作。不同于Python列表直接列举创建,NumPy用`np.array()`创建数组。两者都支持索引和切片,但NumPy性能更优。数学运算方面,NumPy支持简洁的向量化操作,如`my_array * 2`,无需循环。NumPy还简化了数组形状变换,如使用`reshape()`方法。此外,NumPy数组要求元素类型一致,提高了内存使用效率和计算速度。这些特点使NumPy在科学计算和数据分析中不可或缺。
28 0
|
2天前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
19 10
|
2天前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
27 4
|
3天前
|
机器学习/深度学习 并行计算 调度
CuPy:将 NumPy 数组调度到 GPU 上运行
CuPy:将 NumPy 数组调度到 GPU 上运行
10 1
|
12天前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。
|
10天前
|
API Python
Numpy 数组的一些集合操作
Numpy 数组的一些集合操作
21 0
|
10天前
|
编译器 Linux API
基于类型化 memoryview 让 Numpy 数组和 C 数组共享内存
基于类型化 memoryview 让 Numpy 数组和 C 数组共享内存
21 0
|
2月前
|
存储 缓存 C语言
|
2月前
|
索引 Python