Numpy介绍

本文介绍了NumPy库的基础知识,包括创建、操作和变形数组,以及使用数学函数。NumPy的ndarray对象是其核心,具有多个轴、形状、类型等属性。文章通过实例展示了如何创建数组、进行数学运算、索引和切片,并讨论了类型转换。此外,还涵盖了随机数生成和数组统计功能。

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

Numpy介绍

使用之前需要导入Numpy

import numpy as np

NumPy 的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在 NumPy 中,维度称为轴。 例如,3D 空间中一个点的坐标[1, 2, 1]只有一个轴。该轴有 3 个元素,因此我们说它的长度为 3。在下图中的示例中,数组有 2 个轴。第一个轴的长度为 2,第二个轴的长度为 3。

NumPy 的数组类称为ndarray。它也被称为别名 array。请注意,numpy.array这与标准 Python 库类不同array.array,后者仅处理一维数组并提供较少的功能。ndarray对象更重要的属性是:

  • ndarray.ndim 数组的轴数(维度)。
  • ndarray.shape 数组的维度。这是一个整数元组,象征着每个维度中数组的大小。对于具有n行和m列的矩阵,shape将为(n,m)。因此,元组shape的长度是轴的数量,ndim。
  • 数组大小数组的元素总数。这等于shape元素的乘积。
  • ndarray.dtype 描述数组中元素类型的对象。可以使用标准 Python 类型创建或指定 dtype。此外,NumPy 提供了自己的类型。numpy.int32、numpy.int16 和 numpy.float64 是一些示例。
  • ndarray.itemsize 数组每个元素的大小(以字节为单位)。例如,一个类型元素的数组float64有itemsize8 个(=64/8),而一个类型的元素complex32有itemsize4 个(=32/8)。它相当于ndarray.dtype.itemsize。
  • ndarray.data 包含数组实际元素的缓冲区。通常,我们不需要使用此属性,因为我们将使用索引工具访问数组中的元素。

NumPy 数组创建

array创建

可以使用array函数从常规 Python 列表或元组创建数组

a = np.array([1,3,11])
a
array([ 1,  3, 11])
a.shape
(3,)
a.dtype
dtype('int32')
a = np.array([[1.1,2,3],[2,4,8]])
a
array([[1.1, 2. , 3. ],
       [2. , 4. , 8. ]])
a.shape
(2, 3)
a.dtype
dtype('float64')

zeros,ones创建

a = np.zeros((3,8))
a
array([[0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0.]])
a = np.ones((2,5))
a
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])
# 指定类型
a = np.ones((4,2),dtype=np.float64)
a.dtype
dtype('float64')

arange创建

np.arange(1,3)
array([1, 2])
np.arange(1,11,3)
array([ 1,  4,  7, 10])
np.array([np.arange(1,5,0.5),np.arange(1,9)])
array([[1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5],
       [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. ]])

随机数创建

#生成一个 0 到 100 之间的随机整数:
np.random.randint(100)
67
# random 模块的 rand() 方法返回 0 到 1 之间的随机浮点数。
np.random.rand()
0.8036665376544574
np.random.rand(6,3)
array([[0.14565413, 0.67196986, 0.01603824],
       [0.05228213, 0.72782701, 0.47755347],
       [0.62613132, 0.08992243, 0.23964293],
       [0.23977211, 0.46031127, 0.22726328],
       [0.83314693, 0.79064596, 0.24260102],
       [0.73696135, 0.86420688, 0.86527412]])
#randint() 方法接受 size 参数,您可以在其中指定数组的形状。
np.random.randint(30,50,size = (6))
array([48, 47, 32, 33, 37, 48])
np.random.randint(44,51,size = (3,6))
array([[44, 47, 47, 46, 46, 48],
       [45, 44, 48, 49, 45, 50],
       [50, 46, 49, 49, 46, 50]])
#从数组生成随机数
np.random.choice([1,5,7])
7
np.random.choice([1,5,7,11,32],size = (2,3))
array([[ 5, 32,  1],
       [ 1, 11, 11]])

np.random.normal()的意思是一个正态分布,normal这里是正态的意思。
参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布,
参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。
参数size(int 或者整数元组):输出的值赋在shape里,默认为None。

data = np.random.normal(loc=0,scale=1e-2,size=(1,13)) 
data
array([[-0.01127862, -0.00143676, -0.01302496, -0.01239942, -0.0120068 ,
         0.01065305,  0.004626  ,  0.00193842, -0.01895159,  0.01232755,
        -0.00061731, -0.00216356, -0.00426709]])

数组变形reshape

a = np.array([np.arange(1,5,0.5),np.arange(1,9)])
a
array([[1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5],
       [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. ]])
a.reshape(4,4)
array([[1. , 1.5, 2. , 2.5],
       [3. , 3.5, 4. , 4.5],
       [1. , 2. , 3. , 4. ],
       [5. , 6. , 7. , 8. ]])
a.reshape(2,2,4)
array([[[1. , 1.5, 2. , 2.5],
        [3. , 3.5, 4. , 4.5]],

       [[1. , 2. , 3. , 4. ],
        [5. , 6. , 7. , 8. ]]])

运算

a = np.array([2,3,11])
a
array([ 2,  3, 11])
b = np.arange(1,4)
b
array([1, 2, 3])
a - b
array([1, 1, 8])
# 几次方
a ** 3
array([   8,   27, 1331], dtype=int32)
# sin
np.sin(a)
array([ 0.90929743,  0.14112001, -0.99999021])
# 大小比较
a <3
array([ True, False, False])
#  数组中按元素进行运算
a * b
array([ 2,  6, 33])
# 矩阵乘积
a = np.array([[2,3],[1,5]])
b = np.array([[1,2],[3,3]])
a
array([[2, 3],
       [1, 5]])
b
array([[1, 2],
       [3, 3]])
a @ b
array([[11, 13],
       [16, 17]])
a.dot(b)
array([[11, 13],
       [16, 17]])
#+=操作
a
array([[2, 3],
       [1, 5]])
a+=1
a
array([[4, 5],
       [3, 7]])
# 统计
a.max()
7
a.min()
3
a.sum()
19
np.sort(a)
array([[4, 5],
       [3, 7]])
np.exp(a)
array([[  54.59815003,  148.4131591 ],
       [  20.08553692, 1096.63315843]])
np.add(a,b)
array([[ 5,  7],
       [ 6, 10]])

NumPy 索引、切片和迭代

a = np.array([[1,2,3],[4,6,9]])
a
array([[1, 2, 3],
       [4, 6, 9]])
a[1]
array([4, 6, 9])
a[1][2]
9
a[1][1:3]
array([6, 9])
a[::-1]## reversed a
array([[4, 6, 9],
       [1, 2, 3]])

数组类型和类型之间的转换

Numpy 类型C型描述
numpy.bool_bool存储为字节的布尔值(真或假)
numpy.bytesigned char平台定义
numpy.ubyteunsigned char平台定义
numpy.shortshort平台定义
numpy.ushortunsigned short平台定义
numpy.intcint平台定义
numpy.uintcunsigned int平台定义
numpy.int_long平台定义
numpy.uintunsigned long平台定义
numpy.longlonglong long平台定义
numpy.ulonglongunsigned long long平台定义
numpy.halfnumpy.float16半精度浮点数:符号位,5 位指数,10 位尾数
numpy.singlefloat平台定义的单精度浮点数:通常为符号位、8 位指数、23 位尾数
numpy.doubledouble平台定义的双精度浮点数:通常为符号位、11 位指数、52 位尾数。
numpy.longdoublelong double平台定义的扩展精度浮点数
numpy.csinglefloat complex复数,由两个单精度浮点数表示(实部和虚部)
numpy.cdoubledouble complex复数,由两个双精度浮点数(实部和虚部)表示。
numpy.clongdoublelong double complex复数,由两个扩展精度浮点数(实部和虚部)表示。
NumPyPython中一个非常核心且不可或缺的科学计算库,它提供了高效的数组操作和数学函数,使得数据处理变得简单且快速。NumPy的核心是`numpy.ndarray`,这是一个多维数组对象,它可以存储各种数据类型,并支持广播机制、切片、索引等操作。 NumPy的主要特点包括: 1. **数组对象**:NumPy数组是带有维度的大型数组,类似于R语言中的向量或矩阵,非常适合处理大量数据。 2. **数据类型**:NumPy数组支持固定大小的数据类型,这使得内存管理高效,避免了不必要的类型转换。 3. **数学运算**:内置了大量的数学函数,可以直接对数组进行运算,如加减乘除、三角函数、指数对数等。 4. ** broadcasting**:NumPy的广播功能允许不同形状的数组之间进行元素级别的运算,简化了操作过程。 5. **兼容性**:NumPy与其他Python科学计算库(如Pandas, SciPy)高度兼容,是数据处理和分析的基础。 使用NumPy通常包括以下步骤: - **安装**:如果你还没安装,可以通过pip(Python包管理器)命令 `pip install numpy` 来安装。 - **导入模块**:在Python脚本中,使用 `import numpy as np` 导入NumPy,并用`np`作为别名来调用函数和方法。 - **创建数组**:可以使用`np.array()`函数创建数组,或使用特殊构造函数如`np.zeros()`、`np.ones()`等。 - **数组操作**:例如,对数组进行索引、切片、排序、统计等操作,以及使用`np.dot()`或`@`符号进行矩阵运算。 - **函数应用**:使用`np.apply_along_axis()`等函数对数组沿着指定轴进行操作。 以下是一些常见NumPy操作的例子: ```python import numpy as np # 创建数组 arr = np.array([1, 2, 3, 4, 5]) print(arr) # 数组操作 print(arr[2:4]) # 切片操作 print(np.sum(arr)) # 求和 # 数学函数 print(np.sin(arr)) # 广播示例 arr1 = np.array([1, 2]) arr2 = np.array([3, 4, 5]) print(arr1 + arr2) # 两个不同形状数组的相加 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<编程路上>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值