Numpy数组优势
2018-01-31 18:54
169 查看
NumPy的数组对象
NumPy是一个开源的Python科学计算基础库,包含:• 一个强大的N维数组对象 ndarray
• 广播功能函数
• 整合C/C++/Fortran代码的工具
• 线性代数、傅里叶变换、随机数生成等功能
同时NumPy是SciPy、 Pandas等数据处理或科学计算库的基础
标准安装的
Python中用列表
(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的
[1,2,3],需要有
3个指针和
三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
此外
Python还提供了一个
array模块,
array对象和列表不同,它直接保存数值,和
C语言的
一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。
NumPy的诞生弥补了这些不足,
NumPy提供了两种基本的对象:
ndarray(N-dimensional array object)和
ufunc(universal function object)。
ndarray(下文统一称之为数组)是
存储单一数据类型的多维数组,而
ufunc则是能够对数组进行处理的函数。总的来说:
数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
设置专门的数组对象,经过优化,可以提升这类应用的运算速度
观察:科学计算中,一个维度所有数据的类型往往相同。数组对象采用相同的数据类型,有助于节省运算和存储空间
性能比较
例:计算 A2+B3A2+B3,其中,A和B是一维数组In [1]: a = [0, 1, 2, 3, 4] In [2]: b = [9, 8, 7, 6, 5] In [3]: import numpy as np In [4]: nda = np.array(a) In [5]: ndb = np.array(b) In [6]: %timeit sum([a[i]**2 + b[i]**3 for i in range(len(a))]) 4.4 µs ± 593 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) In [7]: %timeit nda ** 2 + ndb ** 3 2.51 µs ± 93.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
这是在我一个干净的Ubuntu上测试的结果,可以看到Python3中ndarray的性能比list好,虽然这样还是有些的不严谨,但还是看出了ndarray的一些优势。
Numpy 导入规范
import numpy as np
尽管别名可以省略或更改,建议使用上述约定的别名,类似的科学计算相关的包别名有:
import pandas as pd import scipy.stats as spstats import scipy as sp import matplotlib.pyplot as plt
别名并不强制要求,但是规范要有。
References
用Python做科学计算相关文章推荐
- python numpy.random生成随机数组
- numpy中数组(array)的赋值问题
- 用list去初始化numpy的array数组 numpy的array和python中自带的list之间相互转化
- Python之数组(array)使用方法总结与Numpy中的数组用法
- NumPy形状操作 更改数组的形状
- Numpy中数组重塑、合并与拆分
- 深度学习中常用numpy操作(1.创建数组)
- numpy教程 - 基本数据类型、多维数组ndarray及其切片操作
- 使用pandas将numpy中的数组数据保存到csv文件
- Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
- Numpy 数组和dtype的一个使用误区
- numpy和pandas中数组的合并和拆分
- 170618 如何利用pandas将numpy数组导出生成excel
- python:numpy数组运算、排序、统计、随机数生成
- python numpy数组的索引和切片的操作方法
- Python打开文件,将list、numpy数组内容写入txt文件中的方法
- numpy中多维数组的轴(axis)
- numpy-数组2
- Pyhton科学计算工具Numpy(二)之数组索引切片,numpy随机数及文件生成读取
- Python numpy(ndarray 随机数组 常用操作 线性方程组和矩阵运算)