Python Numpy数据类型:高效处理数值计算

一、Numpy基础知识

NumPy是Python科学计算的基础库,提供了高性能的多维数组对象及其相关的运算。NumPy的核心理念是ndarray(n-dimensional array)。它是一个由同类型元素组成的多维数组,可以使用基于数组的计算来操作数据,不需要For循环。这种方式高效而简洁,也更接近于数学或科学的术语和概念。

>>> import numpy as np
>>> array = np.array([1,2,3])
>>> print(array) # [1,2,3]
>>> print(type(array)) # <class 'numpy.ndarray'>

Numpy数组和Python自带的列表对象类似,但是Numpy数组须具有相同类型的元素,并支持高效的基于数组的计算方法。创建数组时你可以指定dtype(数据类型),不过Numpy会自动推断出dtype。

>>> array1 = np.array([1, 2, 3, 4])
>>> print(array1)    # [1 2 3 4]
>>> print(array1.dtype)   # int32
>>> array2 = np.array([1, 2, 3, 4], dtype=float)
>>> print(array2)    # [1. 2. 3. 4.]
>>> print(array2.dtype)   # float64

二、Numpy数组的形状和轴

ndarray数组不仅有数据类型而且也有一个shape属性,即数组的形状。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array)    # [[1 2 3]
                     #  [4 5 6]]
>>> print(array.shape)  # (2, 3)

数组的轴(axis)是从数组的维度角度来说的。
对于二维数组,第0轴是大小为2(数组的行数),第1轴是大小为3(数组的列数)。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array.sum(axis=0)) # [5, 7, 9]
>>> print(array.sum(axis=1)) # [6, 15]

三、Numpy数组的运算

Numpy的优势在于可以对所有元素进行算术运算,减少常见的for循环操作。

>>> array1 = np.array([1,2,3,4])
>>> array2 = np.array([5,6,7,8])
>>> array3 = np.array([9,10,11,12])
>>> print(array1 + array2)    # [ 6  8 10 12]
>>> print(array2 - array1)    # [4 4 4 4]
>>> print(array1*array2)    # [ 5 12 21 32]
>>> print(array2 / array1)    # [5. 3. 2.33333333 2.]
>>> print(array1**array2)   # [    1    64  2187 65536]
>>> print(array210)    # [False False True True]

除了基本运算外,NumPy还有其他计算函数。例如,统计函数(如平均值,最大值和标准差)和几何函数(如花式索引,切片和字符串分类函数)。

>>> array = np.array([1,2,3,4])
>>> print(array.mean())    # 2.5
>>> print(array.max())    # 4
>>> print(array.min())    # 1
>>> print(array.std())     # 1.118033988749895
>>> print(array.argmax())  # 3
>>> print(array.argmin())  # 0

四、Numpy数组的矩阵运算

Numpy除了支持基本运算之外,还支持各种简单(例如点积)和复杂(例如矩阵分解)运算。

>>> A = np.array([[1.,2.],[3.,4.]])
>>> B = np.array([[5.,6.],[7.,8.]])
>>> print(A.dot(B))   # [[19. 22.]
                     #  [43. 50.]]
>>> print(np.dot(A,B))   # [[19. 22.]
                           #  [43. 50.]]
>>> C = np.array([5.,6.])
>>> print(np.dot(A,C))   # [17. 39.]

五、Numpy数组的索引和切片

NumPy数组的索引方法类似于Python列表。

>>> array = np.array([1,2,3,4])
>>> print(array[0])    # 1
>>> print(array[2])    # 3
>>> print(array[:3])    # [1 2 3]
>>> print(array[-2:])    # [3 4]
>>> array[:2] = 0
>>> print(array)    # [0, 0, 3, 4]

对于多维数组,可以使用逗号分隔的索引元组访问元素。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array[0,1])    # 2
>>> print(array[1,2])    # 6
>>> print(array[:, 1:])    # [[2 3]
                             #  [5 6]]
>>> print(array[:2, 1:])    # [[2 3]
                               #  [5 6]]
>>> print(array[1,:2])     # [4 5]

六、Numpy数组的形状操作

在NumPy中,可以对现有数组进行重新形状,只需要使用reshape函数即可。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array.shape)    # (2, 3)
>>> array2 = array.reshape(3,2)
>>> print(array2.shape)     # (3, 2)
>>> array3 = array.reshape(6,-1)
>>> print(array3.shape)    # (6, 1)

调整数组的形状时不会更改原始数组的数据。反之,改变了数组中的元素会影响到原始数组。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> array2 = array.reshape(3,2)
>>> array[0][1] = 8
>>> print(array2)    # [[1 8]
                      #  [3 4]
                      #  [5 6]]

七、Numpy数组的复制

NumPy ndarray对象的复制主要有两种:深度复制和浅复制。

>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> array2 = array.copy()
>>> array[0][1] = 8
>>> print(array2)   # [[1 2 3]
                     #  [4 5 6]]

上述代码中的array2是array的深复制,所以更改array并不会影响原始数据。

八、Numpy数组的随机数

NumPy还可以生成随机数。我们可以使用numpy.random子模块,它包含我们需要的所有实用程序。

>>> array = np.random.rand(2,2)
>>> print(array)   # [[0.91139848 0.81179606]
                     #  [0.84129243 0.94593798]]
>>> array2 = np.random.randn(2,2)
>>> print(array2)   # [[-0.1420801  -2.58851948]
                      #  [-0.33879746  1.07524694]]
>>> array3 = np.random.randint(low=1, high=10, size=(2,2))
>>> print(array3)   # [[9 6]
                      #  [2 8]]

九、Numpy数组的输入和输出

可以将Numpy数组写入和读取到磁盘。

>>> array = np.array([1, 2, 3, 4])
>>> np.save('array.npy', array)
>>> array2 = np.load('array.npy')
>>> print(array2)    # [1 2 3 4]

如果有多个数组,则可以使用掩码编码,然后将多个数组存储到单个文件中。

>>> array1 = np.array([1, 2, 3, 4])
>>> array2 = np.array([5, 6, 7, 8])
>>> np.savez('arrays.npz', x=array1, y=array2)
>>> data = np.load('arrays.npz')
>>> print(data['x'])    # [1 2 3 4]
>>> print(data['y'])    # [5 6 7 8]

十、Numpy的应用及拓展

Numpy的基本知识让我们能够建立数组和矩阵做统计分析或者图像处理等一些应用,以及在神经网络中需要对数据进行处理。

除此之外,扩展界面在dataframe(数据帧),时间序列分析,科学技术计算领域也可以方便调用。

十一、总结

Numpy对于数值计算在python中有着非常重要的作用。它提供了ndarray数据类型,用于高效、便利地处理大量数据的数值计算。

本文介绍了Numpy的基础知识、数组的形状和轴、数组的运算、数组的矩阵运算、数组的索引和切片、数组的形状操作、数组的复制、数组的随机数、Numpy数组的输入输出、各种应用的拓展等重要的方面。

原创文章,作者:BREN,如若转载,请注明出处:https://www.506064.com/n/138354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
BRENBREN
上一篇 2024-10-04 00:19
下一篇 2024-10-04 00:19

相关推荐

  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论