美文网首页
Python3 -大型数组运算

Python3 -大型数组运算

作者: 惑也 | 来源:发表于2018-12-20 19:57 被阅读68次

问题

需要在大数据集(比如数组或网格)上面执行计算。

解决方案

涉及到数组的重量级运算操作,推荐使用 NumPy 库。 NumPy 的一个主要特征是它会给Python提供一个数组对象,相比标准的Python列表,更适合用来做数学运算。通过示例,展示标准列表对象和 NumPy 数组对象之间的差别:

# Python lists
x = [1, 2, 3, 4]
y = [5, 6, 7, 8]

print(x * 2)
print(x + y)
print(x + 10)

[1, 2, 3, 4, 1, 2, 3, 4]
[1, 2, 3, 4, 5, 6, 7, 8]
Traceback (most recent call last):
  File "/Users/xz/Documents/sublime/cookbook/cook-3.9.py", line 7, in <module>
    print(x + 10)
TypeError: can only concatenate list (not "int") to list


# Numpy arrays
import numpy as np 

ax = np.array([1, 2, 3, 4])
ay = np.array([5, 6, 7, 8])

print(ax * 2)
print(ax + 10)
print(ax + ay)
print(ax * ay)

[2 4 6 8]
[11 12 13 14]
[ 6  8 10 12]
[ 5 12 21 32]

正如所见,两种方案中数组的基本数学运算结果并不相同。 特别的, NumPy 中的标量运算(比如 ax * 2 或 ax + 10 )会作用在每一个元素上。当两个操作数都是数组的时候,执行元素对等位置计算,并最终生成一个新的数组。

对整个数组中所有元素,同时执行数学运算可以使得作用在整个数组上的函数运算简单而又快速。 比如,如果你想计算多项式的值,可以这样做:

ax = np.array([1, 2, 3, 4])
def f(x):
    return x * 3 ** 2 - 2 * x + 7

print(f(ax))
[14 21 28 35]

NumPy 还为数组操作提供了大量的通用函数,这些函数可以作为 math 模块中类似函数的替代。比如:

print(np.sqrt(ax))
print(np.cos(ax))

[1.         1.41421356 1.73205081 2.        ]
[ 0.54030231 -0.41614684 -0.9899925  -0.65364362]

使用这些通用函数要比循环数组并使用 math 模块中的函数执行计算要快的多。 因此,只要有可能的话尽量选择 NumPy 的数组方案。

底层实现中, NumPy 数组使用了C或者Fortran语言的机制分配内存。 也就是说,它们是一个非常大的连续的并由同类型数据组成的内存区域。

关于 NumPy 有一点需要特别的主意,那就是它扩展Python列表的索引功能 - 特别是对于多维数组选取时非常方便。

讨论

NumPy 是Python领域中很多科学与工程库的基础,同时也是被广泛使用的最大最复杂的模块。通常我们导入 NumPy 模块的时候会使用语句 import numpy as np 。

相关文章

  • Python3 -大型数组运算

    问题 需要在大数据集(比如数组或网格)上面执行计算。 解决方案 涉及到数组的重量级运算操作,推荐使用 NumPy ...

  • Python: 大型数组运算

    需要在大数据集(比如数组或网格) 上面执行计算,涉及到数组的重量级运算操作,可以使用NumPy 库。 下面是一个简...

  • ndarray数组创建

    数值计算库-Numpy的作用: Numpy用于在大型、多维数组(矩阵)上执行数值运算 Numpy是Scipy/Pa...

  • 2. Numpy使用

    numpy的基本操作 生成数组 数组的基本操作 数组的运算 数组间的运算

  • NumPy基础之数组的运算

    数组运算 数组运算与算数运算包含的内容相似,一般包括数组的加法、减法、乘法和除法,接下来详细讲解数组中的运算,具体...

  • 数据分析学习笔记(二)--numpy:数组对象相关操作

    数组和标量的运算 加、减、乘、除、平方等运算 numpy中内置的运算 数组的索引和切片 一维数组的索引和切片 多维...

  • java学习-1

    数组 运算符 包 访问权限 修饰符 数组 1. 数组的声明: int[] a; 2. 数组的创建 使用new运算符...

  • 第15章 数组

    数组运算规则

  • [numpy]对于numpy数组的探索

    一.先来简单的说一下数组的运算。 (1)数组的运算,就会对数组中的每一个元素进行计算,然后返回运算过后的数组的值组...

  • Python学习笔记(2):Numpy基础之数组运算及索引和切片

    目录一、数组运算二、数组索引和切片1、切片索引(1)一维数组(2)二维数组2、布尔型索引3、花式索引 一、数组运算...

网友评论

      本文标题:Python3 -大型数组运算

      本文链接:https://www.haomeiwen.com/subject/yhhukqtx.html