Numpy

什么是Numpy?

NumPy是Python中科学计算的基础软件包。 它是一个提供多了维数组对象,多种派生对象(如:掩码数组、矩阵)以及用于快速操作数组的函数及API, 它包括数学、逻辑、数组形状变换、排序、选择、I/O 、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等等。

NumPy中的核心是ndarray对象。ndarray对象是具有相同类型和大小(通常是固定大小)项目的多维容器。可以对其进行索引、切片、形状变换等操作。

关于axis

根据官方的说法,1表示横轴,方向从左到右;0表示纵轴,方向从上到下,即axis=1为横向,axis=0为纵向。

有时候理解为行和列会很容易使用的,但实际不是表示行列

数组

  • 数组内元素的类型需要相同

  • 创建数组大小固定

创建数组

In [1]:

import numpy as np

a = np.array( # 创建一个1x3的一维数组
    [1,2,3]
)
a

Out[1]:

In [2]:

Out[2]:

ndarray对象的属性

ndarray.shape

数组的形状。返回一个元组表示各个维度中数组的大小。

In [3]:

Out[3]:

In [11]:

Out[11]:

In [13]:

Out[13]:

ndarray.ndim

数组的轴(维度)的个数即几行。维度的数量被称为rank。

In [4]:

Out[4]:

ndarray.size

数组中元素的总数。等于shape各个元素的乘积。

In [5]:

Out[5]:

ndarray.dtype

一个描述数组中元素类型的对象

In [6]:

Out[6]:

ndarray.itemsize

数组中每个元素的字节大小。

In [7]:

Out[7]:

ndarray.real

数组的实部

In [8]:

Out[8]:

In [9]:

Out[9]:

ndarray.imag

数组的虚部

In [10]:

Out[10]:

ndarray的创建方法

nd.array()

In [1]:

Out[1]:

np.asarray()

array()和asarray()都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。

In [14]:

Out[14]:

In [15]:

Out[15]:

np.zeros(shape, dtype=float)

创建一个全为0的数组(ndarray对象)

  • shape:形状,即创建几行几列的数组

  • dtype:数组内值得数据类型

In [16]:

Out[16]:

In [17]:

Out[17]:

In [18]:

Out[18]:

np.zeros_like()

传入一个数组作为参数,根据该数组的形状和dtype创建一个全0的ndaray对象

In [19]:

Out[19]:

np.empty((shape, dtype=float)

类似于np.zeros(),但只分配内存但是不填充任何值

  • shape:形状,即创建几行几列的数组

  • dtype:数组内值得数据类型

In [20]:

Out[20]:

np.empty_like()

同上

np.full(shape, fill_value, dtype=None,)

根据指定形状传建一个数组(ndarray对象),并用fill_value的值进行填充

  • shape:指定ndarray数组的大小、

  • fill_vallue:填充值,即数组内值全为fill_valule

In [21]:

Out[21]:

np.full_like()

同上

np.eye()

传入一个整数N,创建一个N * N的单位矩阵

In [22]:

Out[22]:

np.identity()

传入一个整数N,创建一个N * N的单位矩阵,类似于np.eye()

In [23]:

Out[23]:

np.random

随机抽样创建数组

  • rand:产生指定形状的均匀分布的样本值

  • randn:返回一个或一组样本,具有标准正态分布

  • randint:从给定的上下限范围内选取随机整数

  • binomial:产生二项分布的样本值

  • normal:产生正态(高斯)分布的样本值

  • beta:生Beta分布的样本值

  • chisquare:产生卡方分布的样本值

  • gamma:产生Gamma分布的样本值

  • uniform:产生在指定范围中均匀分布的样本值

  • shuffle:一个序列就地随机排列

In [24]:

Out[24]:

In [25]:

Out[25]:

np.arange(start,stop,step,dtype)

创建一位数组,从start~stop(不包括stop)范围内选取值,步长为step,默认为1

In [26]:

Out[26]:

In [27]:

Out[27]:

In [28]:

Out[28]:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

返回一个在指定范围内(start~stop,但不包括stop)指定大小num(默认为50)的一位数组

In [29]:

Out[29]:

In [30]:

Out[30]:

np.fromfunction(function, shape, **kwargs)

通过对每个执行函数来构造一个数组

  • function:执行函数

  • shape:数组大小

In [31]:

Out[31]:

In [32]:

Out[32]:

In [33]:

Out[33]:

In [34]:

Out[34]:

数据类型

  • 所有的数据类型如下表所示:

数据类型
类型代码
说明

int8、uint8

i1、u1

有符号和无符号的8位(1个字节)整形

int16、uint16

i2、u2

有符号和无符号的16位(2个字节)整形

int32、uint32

i4、u4

有符号和无符号的32位(4个字节)整形

int64、uint64

i8、u8

有符号和无符号的64位(8个字节)整形

float16

f2

半精度浮点数

float32

f4或f

标准的单精度浮点数

float64

f8或d

标准的双精度浮点数

float128

f16或g

扩展精度浮点数

bool

?

存储布尔类型(存储为一个字节)

object

O

Python对象类型

string_

S

固定长度的字符串类型(每个字符1个字节)

unicode_

U

固定长度的unicode类型(字节数由平台决定)

complex64、complex128、complex256

c8、c16、c32

分别用两个32位、64位或128位浮点数表示的复数

注意:int_int32的简写,float_float64的简写,complex_complex128的简写

In [1]:

Out[1]:

数组运算

In [1]:

In [2]:

Out[2]:

数组与标量的算术运算

In [3]:

Out[3]:

加法

In [5]:

Out[5]:

减法

In [6]:

Out[6]:

除法

In [7]:

Out[7]:

In [8]:

星乘(*)与点乘(.)

In [8]:

In [9]:

Out[9]:

In [10]:

In [11]:

In [12]:

Out[12]:

In [13]:

Out[13]:

拷贝

  • 完全不拷贝:两个变量公用一个数组,引用的地址都是同一个

In [14]:

Out[14]:

In [15]:

Out[15]:

In [16]:

Out[16]:

In [17]:

Out[17]:

In [18]:

Out[18]:

  • 浅拷贝:与上有区别,一个数组值会变化会反映在另一个数组上,但是形状不变化

In [21]:

In [22]:

Out[22]:

In [23]:

Out[23]:

In [24]:

In [25]:

Out[25]:

In [26]:

Out[26]:

In [30]:

Out[30]:

In [31]:

Out[31]:

  • 深拷贝:创建原数组的副本,副本的任何变化都不会反映在原数组上

In [32]:

In [33]:

In [34]:

Out[34]:

In [35]:

Out[35]:

索引与切片

In [36]:

Out[36]:

  • 取第2,3,4行的数据,注意索引从0开始

In [37]:

Out[37]:

  • 取(2,4),(3,5),(4,6)的值

In [39]:

Out[39]:

  • 取第2,3,4行后,再取第4,5,6列的值

In [42]:

Out[42]:

统计方法 ☆☆☆

In [1]:

In [2]:

In [3]:

Out[3]:

amin(a[, axis, out, keepdims]

返回数组的最小值或沿轴的最小值

见下

amax(a[, axis, out, keepdims])

返回数组的最大值或沿轴的最大值

In [4]:

Out[4]:

In [5]:

Out[5]:

In [6]:

Out[6]:

nanmin(a[, axis, out, keepdims])

返回数组的最小值或沿轴的最小值,忽略任何NAN

见下

nanmax(a[, axis, out, keepdims])

返回数组的最大值或沿轴方向的最大值,忽略任何NAN

In [7]:

Out[7]:

In [8]:

Out[8]:

median(a[, axis, out, overwrite_input, keepdims])

沿指定轴计算中值

#### nanmedian(a[, axis, out, overwrite_input, …])

在忽略NAS的情况下,沿指定的轴计算中值

In [9]:

Out[9]:

average(a[, axis, weights, returned])

计算沿指定轴的加权平均

见下

mean(a[, axis, dtype, out, keepdims])

沿指定的轴计算算术平均值

见下

nanmean(a[, axis, dtype, out, keepdims])

计算沿指定轴的算术平均值,忽略NAN

In [11]:

Out[11]:

In [12]:

Out[12]:

std(a[, axis, dtype, out, ddof, keepdims])

计算沿指定轴的标准偏差即标准差

见下

nanstd(a[, axis, dtype, out, ddof, keepdims])

计算指定轴上的标准偏差,而忽略NAN

In [14]:

Out[14]:

var(a[, axis, dtype, out, ddof, keepdims])

计算沿指定轴的方差

见下

nanvar(a[, axis, dtype, out, ddof, keepdims])

计算指定轴上的方差,同时忽略NAN

In [15]:

Out[15]:

形状变换

重塑

  • ndarray.reshape(shape, order='C')

  • ndarray.resize()

    注意:reshape 函数返回修改后的新对象,而 ndarray.resize 方法修改数组本身

  • 重塑的各个维度上整数的乘积必须等于arr.size

  • 如果想让自动计算某个轴上的大小,可以传入-1

扁平化处理

In [1]:

Out[1]:

In [2]:

Out[2]:

In [3]:

In [4]:

Out[4]:

数组合并

concatenate

沿着一条轴连接一组(多个)数组。除了与axis对应的轴之外,其它轴必须有相同的形状。

In [1]:

In [2]:

Out[2]:

In [3]:

Out[3]:

vstack&row_stack

以追加行的方式对数组进行连接(沿轴0)即垂直方向

In [4]:

Out[4]:

In [5]:

Out[5]:

hstack

以追加列的方式对数组进行连接(沿轴1)即水平方向

In [6]:

Out[6]:

column_stack

类似于hstack,但是会先将一维数组转换为二维列向量

In [7]:

Out[7]:

dstack

以面向“深度”的方式对数组进行叠加

In [8]:

Out[8]:

数组拆分

split

沿指定轴在指定的位置拆分数组

In [9]:

Out[9]:

In [10]:

Out[10]:

In [11]:

Out[11]:

In [12]:

Out[12]:

hsplit、vsplit、dsplit

split的便捷化函数,分别沿轴0、轴1、轴2进行拆分

重复数组

repeat

对数组中的元素进行复制

In [13]:

Out[13]:

In [14]:

Out[14]:

In [15]:

Out[15]:

注意在多维数组中,不指定axis轴方向,会扁平化

tile

对整个数组进行复制

In [16]:

Out[16]:

In [17]:

Out[17]:

In [18]:

Out[18]:

In [19]:

Out[19]:

In [20]:

Out[20]:

转置

ndarray数组对象.T即可得到ndarray对象的转置

In [21]:

Out[21]:

In [23]:

Out[23]:

In [24]:

Out[24]:

通用函数☆☆☆

一元ufunc

函数
说明

abs、fabs

计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs

sqrt

计算各元素的平方根。相当于arr ** 0.5

square

计算各元素的平方。相当于arr ** 2

exp

计算各元素的指数。相当于e的x次方

log、log10、log2、log1p

分别对应自然对数(底数为e)、底数为10的log、底数为2的log、log(1 + p)

sign

计算各元素的正负号:1(正数)、0(零)、-1(负数)

ceil

计算各元素的ceiling值,即大于等于该值的最小整数

floor

计算各元素的floor值。即小于等于该值的最大整数

rint

将各元素值四舍五入到最接近的整数,保留dtype

modf

将数组的小数和整数部分以两个独立数组的形式返回

isnan

返回一个表示“哪些值是NaN”的布尔型数组

isfinite、isinf

分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组

cos、cosh、sin、sinh、tan、tanh

普通型和双曲型三角函数

arccos、arccosh、arcsin、arcsinh、arctan、arctanh

反三角函数

logical_not

计算个元素的not x的真值。相当于-arr

二元ufunc

函数
说明

add

将数组中对应的元素相加

subtract

从第一个数组中减去第二个数组中的元素

multiply

将数组元素相乘

divide、floor_divide

除法或向下取整除法(丢弃余数)

power

对第一个数组中的元素A,根据第二个数组中的相应元素B,计算A的B次方

maximum、fmax

元素级的最大值计算。fmax将忽略NaN

minimum、fmin

元素级的最小值计算。fmin将忽略NaN

mod

元素级别的求模计算(除法的余数)

copysign

将第二个数组中的值得符号复制给第一个数组中的值

greater、greater_equal、less、less_equal、equal、not_equal、

执行元素级的比较运算,最终产生布尔数组。相当于中缀运算符号>、>=、<、<=、==、!=

logical_and、logical_or、logical_xor

执行元素级的真值逻辑运算。相当于中缀运算符&、| 、^

In [24]:

In [25]:

Out[25]:

In [26]:

Out[26]:

In [27]:

Out[27]:

In [28]:

Out[28]:

In [29]:

Out[29]:

搜索和计数☆☆☆

搜索

argmax(a[, axis, out])

返回沿轴的最大值的索引即最大值所在位置的下标

In [1]:

Out[1]:

In [2]:

Out[2]:

In [3]:

Out[3]:

In [4]:

Out[4]:

nanargmax(a[, axis])

返回指定轴上最大值的索引,忽略NAN

argmin(a[, axis, out])

返回沿轴的最小值的索引即最小值所在位置的下标

In [5]:

Out[5]:

##### nanargmin(a[, axis])

返回指定轴上的最小值的索引,忽略NAN

##### argwhere(a)

返回按元素分组的非零数组元素的索引。

In [8]:

Out[8]:

##### nonzero(a)

返回非零元素的索引,以两个数组的形式进行返回,第一个数组为行下标,第二个数组为列下标

In [9]:

Out[9]:

##### flatnonzero(a)

返回a的展平版本中非零的索引

In [10]:

Out[10]:

##### where(condition, [x, y])☆

返回元素,可以是x或y,具体取决于条件

In [11]:

Out[11]:

In [12]:

Out[12]:

In [13]:

Out[13]:

##### searchsorted(a, v[, side, sorter])

查找应插入元素以维护顺序的索引

In [14]:

In [15]:

Out[15]:

In [16]:

Out[16]:

In [17]:

Out[17]:

In [18]:

Out[18]:

##### extract(condition, arr)

返回满足某些条件的数组元素

#### 计数

##### count_nonzero(a[, axis])

计算数组a中的非零值的数量

In [20]:

Out[20]:

In [21]:

Out[21]:

In [22]:

Out[22]:

线性代数

diag(v, k=0)

以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一数组转换为方阵(非对角线元素为0)

In [24]:

Out[24]:

In [25]:

Out[25]:

In [26]:

Out[26]:

##### dot(a, b[, out])

两个数组的点积

In [27]:

Out[27]:

##### trace(a[, offset, axis1, axis2, dtype, out])

计算对角线元素的和

In [28]:

Out[28]:

##### linalg.det(a)

计算矩阵行列式

In [29]:

Out[29]:

In [30]:

Out[30]:

##### linalg.inv(a)

计算方阵的逆

In [31]:

Out[31]:

计算均方误差MSE

用numpy进行表示

分别设置相应的预测值以及真实值

In[1]:

Out[1]:

注意进行计算时,需要知道矩阵的状态,才能保证按照公式计算无误

最后更新于

这有帮助吗?