Numpy
什么是Numpy?
NumPy是Python中科学计算的基础软件包。 它是一个提供多了维数组对象,多种派生对象(如:掩码数组、矩阵)以及用于快速操作数组的函数及API, 它包括数学、逻辑、数组形状变换、排序、选择、I/O 、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等等。
NumPy中的核心是ndarray对象。ndarray对象是具有相同类型和大小(通常是固定大小)项目的多维容器。可以对其进行索引、切片、形状变换等操作。
关于axis
根据官方的说法,1表示横轴,方向从左到右;0表示纵轴,方向从上到下,即axis=1为横向,axis=0为纵向。
有时候理解为行和列会很容易使用的,但实际不是表示行列
数组
数组内元素的类型需要相同
创建数组大小固定
创建数组
In [1]:
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]:
注意进行计算时,需要知道矩阵的状态,才能保证按照公式计算无误
最后更新于
这有帮助吗?