NumPy库的使用

本文详细介绍了NumPy库的核心——N维数组对象ndarray,包括其概念、作用、属性、创建方法、数组操作、元素类型、文件存取以及随机数函数。ndarray提供了一种高效处理多维数据的手段,支持各种数组操作和运算,是Python科学计算的基础。
摘要由CSDN通过智能技术生成

一、NumPy库概述

NumPy库是一个开源的python科学计算基础库,底层实现是由C语言实现的,运算快速高效。

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

NumPy是Scipy、Pandas等数据处理或科学计算库的基础

二、NumPy库的安装

在命令行cmd中使用pip工具安装即可。

pip install numpy

三、NumPy库的引用

约定:

import numpy as np

引用简单且便于识别。

四、N维数组对象:ndarray

4.1 简要介绍

ndarray是一个多维数组对象,由两部分组成:

  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)

ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始

4.2 作用

  • Q:Python已有列表类型,为什么需要一个数组对象(类型)?

    def pySum():
        a = [0,1,2,3,4]
        b = [5,6,7,8,9]
        c = []
        for i in range(len(a)):
            c.append(a[i] ** 2 + b[i] ** 3)
        return c
    print(pySum())
    

    对比👇

    import numpy as np
    def pySum():
        a = np.array([0,1,2,3,4])
        b = np.array([5,6,7,8,9])
        c = a ** 2 + b ** 3
        return c
    print(npSum())
    

    数组对象的优势:

    • 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
    • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
    • 数组对象采用相同的数据类型,有助于节省运算和存储空间

4.3 引例

>>> import numpy as np
>>> a = np.array([[0,1,2,3,4],[5,6,7,8,9]]) # 生成一个ndarray数组
>>> a
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> print(a) # 输出成[]形式,元素由空格分隔
[[0 1 2 3 4]
 [5 6 7 8 9]]

轴(axis):保存数据的维度
秩(rank):轴的数量

4.4 ndarray 对象的属性

  • np.ndim —— 秩,即轴的数量或维度的数量

  • np.shape —— ndarray 对象的尺度,对于 mxn 矩阵,为 n 行 m 列

  • np.size —— ndarray 对象元素的个数,相当于 .shape 中 n*m 的值

  • np.dtype —— ndarray 对象的元素类型

  • np.itemsize —— ndarray 对象中每个元素的大小,以字节为单位

e.g.

>>> import numpy as np
>>> a = np.array([[0,1,2,3,4],[5,6,7,8,9]])
>>> a.ndim
2
>>> a.shape
(2, 5)
>>> a.size
10
>>> a.dtype
dtype('int32')
>>> a.itemsize
4

4.5 ndarray 数组的元素类型

数据类型 说明
bool 布尔类型,True 或 False
intc 与C语言中的 int 类型一致,一般是int32或int64
intp 用于索引的整数,与C语言中ssize_t一致,int32或int64
int8 字节长度的整型,取值:[-128,127]
int16 16位长度的整型,取值:[-32768,32767]
int32 32位长度的整型,取值:[-231,231-1]
int64 64位长度的整型,取值:[-263,263-1]
uint8 8位无符号整数,取值:[0,255]
uint16 16位无符号整数,取值:[0,65535]
uint32 32位无符号整数,取值:[0,232-1]
uint64 64位无符号整数,取值:[0,264-1]
float16 16位半精度浮点数:1位符号位,5位指数,10位尾数
float32 32位半精度浮点数:1位符号位,8位指数,23位尾数
float64 64位半精度浮点数:1位符号位,11位指数,52位尾数
complex64 复数类型,实部和虚部都是32位浮点数
complex128 复数类型,实部和虚部都是64位浮点数
  • Q:ndarray 为什么要支持这么多类型?
    科学计算涉及数据较多,对存储和性能都有较高要求
    对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能
    对元素类型精细定义,有助于程序员对程序规模有合理评估

4.6 非同质的 ndarray 对象

  • ndarry 数组可以由非同质对象构成
  • 非同质 ndarry 元素为对象类型object
  • 非同质 ndarry 对象无法有效发挥 NumPy 优势,尽量避免使用

4.7 ndarray 数组的创建方法

基本创建方法:

  • 从python中的列表、元组等类型创建ndarray数组
  • 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等
  • 从字节流(raw bytes)中创建ndarray数组
  • 从文件中读取特定格式,创建ndarray数组

(1)从python中的列表、元组等类型创建ndarray数组

>>> import numpy as np
>>> x = np.array([0, 1, 2, 3]) # 从列表类型创建
>>> print(x)
[0 1 2 3]
>>> x = np.array((4, 5, 6, 7)) # 从元组类型创建
>>> print(x)
[4 5 6 7]
>>> x = np.array([[1, 2], [9, 8], (0.1, 0.2)]) # 从列表和元组混和类型创建
>>> print(x)
[[1.  2. ]
 [9.  8. ]
 [0.1 0.2]]

(2)使用 NumPy 中函数创建 ndarray 数组

函数 说明
np.arange(n) 类似 range() 函数,返回 ndarray 类型,元素为从0到n-1的整型
np.ones(shape) 根据 shape 生成一个元素类型为浮点型的全1数组,shape 是元组类型
np.zeros(shape) 根据 shape 生成一个元素类型为浮点型的全0数组,shape 是元组类型
np.full(shape,val) 根据 shape 生成一个数组,每个元素值都是val
np.eye(n) 创建一个n*n元素类型为浮点型单位方阵,对角线为1,其余为0

*可使用 dtype 指定数组对象元素类型

  1. np.arange(n)

    >>> np.arange(10)
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
  2. np.ones(shape)

    >>> np.ones((3, 6))
    array([[1., 1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1., 1.]])
    
  3. np.zeros(shape)

    >>> np.zeros((3, 6))
    array([[0., 0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0.]])
    >>> np.zeros((3, 6), dtype=np.int32)
    array([[0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0]])
    
  4. np.full(shape,val)

    >>> np.full((2, 3), 2)
    array([[2, 2, 2],
           [2, 2, 2]])
    
  5. np.eye(shape)

    >>> np.eye(5)
    array([[1., 0., 0., 0., 0.],
           [0., 1., 0., 0., 0.],
           [0., 0., 1., 0., 0.],
           [0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 1.]])
    >>> x = np.ones((2, 3, 4))
    >>> print(x)
    [[[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]
    
     [[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]]
    >>> x.shape
    (2, 3, 4)
    
函数 说明
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val

👆这三个函数在进行大规模科学计算时特别重要。

(3)使用 NumPy 中其他函数创建 ndarray 数组

函数 说明
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组
>>> a = np.linspace(1, 10, 4, dtype=int)
>>> a
array([ 1,  4,  7, 10])

>>> b = np.linspace(1, 10, 4, endpoint=False) # endpoint指定终止数值是否作为新数组的末尾值
>>> b
array([1.  , 3.25, 5.5 , 7.75])

>>> c = np.concatenate((a, b))
>>> c
array([ 1.  ,  4.  ,  7.  , 10.  ,  1.  ,  3.25,  5.5 ,  7.75])

4.8 ndarray 数组的变换

方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与 np.reshape() 功能一致,但就地修改原数组,无返回值
.swapaxes(ax1, ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
.astype(new_type) 创建新的数组(原始数据的一个拷贝)
.tolist() 将 numpy 数组转换为列表类型并返回,不修改原数组
  1. reshape(shape)

    >>> x 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值