Numpy概述

简介: Numpy概述

NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。

1.1.1. Why NumPy?
一个强大的N维数组对象ndarray,具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
用于集成由C、C++、Fortran等语言类库的C语言 API
线性代数、随机数生成以及傅里叶变换功能。
用于对整组数据进行快速运算的标准数学函数(无需编写循环),支持大量的数据运算
是众多机器学习框架的基础库
Tips:Python的面向数组计算可以追溯到1995年,Jim Hugunin创建了Numeric库。接下来的10年,许多科学编程社区纷纷开始使用Python的数组编程,但是进入21世纪,库的生态系统变得碎片化了。2005年,Travis Oliphant从Numeric和Numarray项目整了出了NumPy项目,进而所有社区都集合到了这个框架下。

NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。这是因为:

NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。
NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。
我们来直观感受一下numpy的运行速度:

导入numpy

我们将依照标准的Numpy约定,即总是使用import numpy as np

当然你也可以为了不写np, 而直接在代码中使用from numpy import *,

但是建议你最好还是不要养成这样的坏习惯。

import numpy as np

生成一个numpy对象, 一个包含一百万整数的数组

np_arr = np.arange(1000000)

一个等价的Python列表:

py_list = list(range(1000000))
对各个序列分别平方操作(%time是ipython的特殊功能,用于测试语句运行的时间需要安装ipython, pip install ipython)

%time for _ in range(10): np_arr2 = np_arr ** 2
CPU times: user 13.1 ms, sys: 5.62 ms, total: 18.8 ms Wall time: 17.7 ms

%time for _ in range(10): py_list2 = [x ** 2 for x in py_list]
CPU times: user 3.06 s, sys: 173 ms, total: 3.24 s Wall time: 3.25 s 由上述代码可以看出,基于NumPy的算法要比纯Python快10到100倍(甚至更快),并且使用的内存更少

  1. 创建ndarray

NumPy最重要的一个特点就是ndarray(N-dimensional array),即N维数组),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

创建numpy数组的方式

import numpy as np
np.__version__
'1.15.2'
nparr = np.array([i for i in range(10)])
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr2 = np.array(list('abcdefg'))
nparr2
array(['a', 'b', 'c', 'd', 'e', 'f', 'g'], dtype='<U1')
nparr3 = np.array([[11, 22, 33, 44], [10, 20, 30, 40]])
nparr3
array([[11, 22, 33, 44],

   [10, 20, 30, 40]])

2.1.1. arange创建数组
arange函数是python内置函数range函数的数组版本.

产生0-9共10个元素

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

产生从10-19共10个元素

ndarray1 = np.arange(10, 20)

产生10 12 14 16 18, 2为step

ndarray2 = np.arange(10, 20, 2)
ndarray2
array([10, 12, 14, 16, 18])

ndarray2的形状

ndarray2.shape
(5,)

相关文章
|
索引 Python
Numpy 高级(三)
本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 NumPy 高级,学习之前需要学习:NumPy入门
647 0
Numpy 高级(三)
|
3月前
|
API 索引 Python
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 1
NumPy高级索引使用整数数组、布尔数组等来访问数组元素,支持复杂操作与修改。例如,整数数组索引可选取特定位置的元素: ```python import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) y = x[[0,1,2], [0,1,0]] print(y) ``` 输出: `[1 4 5]`.
30 5
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 4
NumPy 提供了高级索引方式,包括整数数组索引、布尔索引及花式索引。布尔索引可通过布尔数组筛选出满足条件(如大于某个值)的元素
19 3
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 5
NumPy高级索引包括整数数组索引、布尔索引及花式索引,扩展了基本索引的功能,允许访问和操作数组中的任意元素。其中,**布尔索引**利用布尔数组来选取符合条件的元素,例如通过比较运算筛选特定值。示例展示了如何使用`~np.isnan(a)`来排除`NaN`值,输出结果为所有非`NaN`元素: `[1. 2. 3. 4. 5.]`.
29 3
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 8
NumPy高级索引包括整数数组索引、布尔索引及花式索引,允许访问数组中的任意元素并执行复杂操作。花式索引通过整数数组定位元素,不同于切片,它始终复制数据到新数组。
28 1
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 7
NumPy高级索引包括整数数组索引、布尔索引及花式索引。花式索引使用整数数组作为索引,根据这些值选择目标数组的元素或行。与切片不同,它总是返回新数组。
16 1
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 9
NumPy高级索引包括整数数组索引、布尔索引及花式索引,能实现对数组元素的灵活访问与复杂操作。其中,花式索引通过整数数组指定目标轴的下标来选取元素,不同于切片,它总是返回新数组。例如,对二维数组使用倒序索引数组时,会得到指定行的新数组:[[16 17 18 19], [24 25 26 27], [28 29 30 31], [4 5 6 7]]。
35 1
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 6
NumPy高级索引包括 using 整数数组、布尔数组等来 access 数组元素, enabling 复杂的操作和 modifications. **布尔索引** uses 布尔数组 to index 目标数组, filtering 元素 based on 条件.
20 2
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 3
NumPy高级索引包括整数数组索引、布尔索引及花式索引,能访问并操作数组中的任意元素。例如,使用整数数组索引可以从多维数组中选取特定位置的元素。对于一个4x3数组`x`,通过定义行索引`rows`和列索引`cols`为`[[0,0],[3,3]]`和`[[0,2],[0,2]]`,可以获取四个角的元素:`x[rows,cols]`,结果为`[[0 2] [9 11]]`。此外,结合切片与索引数组可进一步定制数据选择,如`a[1:3, 1:3]`或`a[...,1:]`等。
27 3