用于速成numpy以配合其他库的基础了解使用
深入学习推荐两个网址
numpy官方中文文档
菜鸟教程|numpy
目录
一、NumPy介绍---数组与矩阵的好基友
二、基本概念
三、数组创建
四、切片和索引
五、运算操作
六、迭代,形状操纵,数组堆叠拆分,及其他基础知识
Numpy是Python中科学计算的基础包。提供多维数组对象,各种派生对象,以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
优点:Numpy以近C速度执行运算,且NumPy的语法简单!
两个特征:矢量化和广播。(大部分功能的基础)
灵活性使NumPy数组方言和NumPy ndarray 类成为在Python中使用的多维数据交换的首选对象。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
轴: 在NumPy维度称为轴。即数组的“行”。
3D空间中的点的坐标:
[1, 2, 1] 具有一个轴。该轴有3个元素,所以我们说它的长度为3
[[ 1., 0., 0.],
[ 0., 1., 2.]] 数组有2个轴。第一轴的长度为2,第二轴的长度为3
N维数组对象 ndarray,用于存放同类型元素的多维数组。
numpy.array与标准Python库类array.array不同,后者只处理一维数组并提供较少的功能。
ndarray对象的属性:
ndarray.ndim - 数组的轴(维度)个数。Python中,维度数量称为rank.
ndarray.shape - 数组的维度。整数元组表示每个维度中数组的大小。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
ndarray.dtype - 描述数组中元素类型。可以使用标准的Python类型创建或指定dtype。NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
ndarray.itemsize - 数组中每个元素的字节大小。等于 ndarray.dtype.itemsize 。
ndarray.data - 该缓冲区包含数组的实际元素。通常不用,因为用索引访问数组元素。
例
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>
(1)新建数组
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
(2)已知数据转化为ndarray数组:
numpy.asarray(a, dtype = None, order = None)
x = (1,2,3)
a = np.asarray(x)
其他方法
numpy.frombuffer 用于实现动态数组。接受输入参数,以流的形式读入转化
numpy.fromiter 从可迭代对象中建立 ndarray 对象,返回一维数组
(3)从数值范围创建数组
1. 未知元素个数
numpy.arange(start, stop, step, dtype)
>>> np.arange( 0, 2, 0.3 )
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
reshape函数:
>>> c = np.arange(24).reshape(2,3,4) # 3d array
>>> print(c)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
2. 已知元素个数
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
名称 描述
num 要生成的等步长的样本数量,默认为50
endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。
>>> np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
(4)创建函数数组!!!(绘图常用!!!)
a = np.fromfunction(func, <shape>)
func是函数
shape相当于自变量数组集合
a 返回相当于由因变量组成的数组
比如9x9乘法表:
def func(i, j):
return (i+1)*(j+1)
np.fromfunction(func, (9, 9))
例举几种创建数组方法:
1. 一维数组
你可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。
>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')
常见的错误:调用array时传入多个数字参数,而不是提供单个数字的列表作参数:
>>> a = np.array(1,2,3,4) # WRONG
>>> a = np.array([1,2,3,4]) # RIGHT
或者如下解决:(推荐)
x = (1,2,3)
a = np.asarray(x)
2. 多维数组
将序列的序列转换成二维数组,将序列的序列的序列转换成三维数组等等。
>>> b = np.array([(1.5,2,3), (4,5,6)])
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
3. 指定数组的类型
>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
4. 创建未知元素已知大小的数组
* zeros创建一个由0组成的数组,
* ones创建一个完整的数组,
* empty 创建一个数组,其初始内容是随机的,取决于内存的状态。
默认情况下,创建的数组的dtype是 float64 类型的。
>>> np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) )
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
一维的数组可以进行索引、切片和迭代操作的,就像 列表 和其他Python序列类型一样。
”索引区间前闭后开!!!“
a[2] 索引第三个元素,结果是数
a[2:5] 索引3到6的元素,结果是数组
a[:6:2] = -1000 从第1个开始到7个元素依次间隔2位赋值为-1000
a[ : :-1] 倒序排列
for i in a: 遍历元素处理
print(i**(1/3.))
多维的数组每个轴可以有一个索引。这些索引以逗号分隔的元组给出:
>>> def f(x,y):
... return 10*x+y
...
>>> b = np.fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1] # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1] # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ] # each column in the second and third row of b
array([[10, 11, 12, 13],
[20, 21, 22, 23]])
当提供的索引少于轴的数量时,缺失的索引被认为是完整的切片:
b[-1] 最后一行,等于b[-1,:]
x[1,2,...] 相当于 x[1,2,:,:,:],(假设5轴)
x[...,3] 等效于 x[:,:,:,:,3]
x[4,...,5,:] 等效于 x[4,:,:,5,:]
a @ b 矩阵乘法
a * b 元素乘法
a/b 元素除法
a**3 元素取3次方
a.max() 最大元素a
a.max(0) 每列矩阵的最大元素 a
a.max(1) 每行矩阵的最大元素 a
maximum(a, b) 比较a和b逐个元素,并返回每对中的最大值
a.transpose() 或 a.T ,转置 a
a.conj().transpose() 或 a.conj().T , 共轭转置 a
通函数:
NumPy提供熟悉的数学函数,例如sin,cos和exp。被称为“通函数”(ufunc)。这些函数在数组上按元素进行运算,产生一个数组作为输出。
B = np.arange(3)
np.exp(B)
np.sqrt(B)
np.add(B, C)
以上知识作为一般入门了解已经足够,所以其他使用
见开篇所附中文手册
本文章使用limfx的vsocde插件快速发布