关于python:深入NumPyPython科学计算库的高级应用

31次阅读

共计 1637 个字符,预计需要花费 5 分钟才能阅读完成。

在本篇文章中,咱们将探讨 Python 中的 NumPy 库的一些高级个性和技巧,包含播送机制、矢量化操作、高级索引、结构化数组以及 NumPy 中的随机抽样等内容。这些性能将有助于咱们进行更加简单和高效的科学计算。

一、播送机制

播送是 NumPy 中对不同形态数组进行算术运算的形式。依据某些规定,NumPy 能够主动地在没有对等形态的数组之间进行计算。

例如,如果咱们想要将一个数字增加到数组的每个元素中,咱们能够应用播送机制:

import numpy as np

arr = np.array([1, 2, 3])
result = arr + 5
print(result)  # 输入:[6 7 8]

同样的,如果两个数组在某个维度上长度统一,或其中一个数组在该维度长度为 1,那么它们也能够进行播送:

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([1, 2, 3])
result = arr1 + arr2
print(result)  # 输入:[[2 4 6] [5 7 9]]

二、矢量化操作

在 NumPy 中,能够应用矢量化操作对数组进行操作,而不须要应用循环。这样能够使代码更加简洁,运行效率也更高。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
result = arr * arr
print(result)  # 输入:[1  4  9 16 25]

这里,咱们间接对数组进行乘法运算,实际上进行的是每个元素的平方,这就是矢量化操作。

三、高级索引

在 NumPy 中,除了能够应用惯例的切片操作来索引数组,还能够应用布尔索引和整数数组索引。

例如,咱们能够通过布尔索引来抉择数组中满足条件的元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
mask = arr > 3
result = arr[mask]
print(result)  # 输入:[4 5]

咱们也能够应用整数数组来索引:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
indices = np.array([1, 3])
result = arr[indices]
print(result)  # 输入:[2 4]

四、结构化数组

结构化数组是一种非凡的数组,它可能存储简单的数据结构,比方混合数据类型、嵌套数组等。

例如,咱们能够定义一个蕴含人名(字符串类型)、年龄(整数类型)和体重(浮点数类型)的结构化数组:

import numpy as np

dtype = [('name', 'S10'), ('age', 'i4'), ('weight', 'f8')]
people = np.array([('Zhang', 25, 55.5), ('Li', 30, 75.5)], dtype=dtype)
print(people)  # 输入:[(b'Zhang', 25, 55.5) (b'Li', 30, 75.5)]

在这个数组中,每个元素都是一个蕴含三个字段的元组。咱们能够应用字段的名字来拜访它们:

ages = people['age']
print(ages)  # 输入:[25 30]

五、NumPy 中的随机抽样

NumPy 提供了大量的随机数生成和统计散布函数,使得它成为了进行统计模仿和随机抽样的无力工具。

例如,咱们能够生成遵从正态分布的随机数:

import numpy as np

samples = np.random.normal(size=(4, 4))
print(samples)

咱们也能够进行随机抽样:

import numpy as np

choices = np.array([1, 2, 3, 4, 5])
samples = np.random.choice(choices, size=10)
print(samples)  # 输入可能为:[5 1 3 5 1 2 3 4 4 2]

在上述代码中,np.random.choice 函数从给定的一维数组中生成随机样本。

这只是 NumPy 库中泛滥高级个性的一部分,了解并纯熟利用这些个性,可能大大提高 Python 在科学计算方面的效率和表现力。

正文完
 0