Numpy详解

NumPy 简介

Python并没有提供数组功能。虽然列表可以完成基本的数组功能,但它不是真正的数组,而且在数据量比较大时,使用列表的速度会很慢。为此,Numpy提供了真正的数组功能,以及对数据进行快速处理的函数。

NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。

例如,在3D空间一个点的坐标 [1, 2, 3] 是一个秩为1的数组,因为它只有一个轴。那个轴长度为3.又例如,在以下例子中,数组的秩为2(它有两个维度).第一个维度长度为2,第二个维度长度为3.

[[ 1., 0., 0.],
 [ 0., 1., 2.]]

NumPy的数组类被称作 ndarray 。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。

数据类型

numpy的数据类型有下面的几个

数据类型 描述
bool_ 以字节存储的布尔值(True 或 False)
int_ 默认的整数类型(和 C 的 long 一样,是 int64 或者 int32)
intc 和 C 的 int 相同(一般为 int64 或 int32)
intp 用于下标的整数(和 C 的 ssize_t 相同,一般为int64 或者 int32)
int8 字节(-128 到 127)
int16 整数(-32768 到 32767)
int32 整数(-2147483648 到 2147483647)
int64 整数(-9223372036854775808 到 9223372036854775807)
uint8 无符号整数(0 到 255)
uint16 无符号整数(0 到 65535)
uint32 无符号整数(0 到 4294967295)
uint64 无符号整数(0 到 18446744073709551615)
float_ float64 的简写
float16 半精度浮点:1位符号,5位指数,10位尾数
float32 单精度浮点:1位符号,8位指数,23位尾数
float64 双精度浮点:1位符号,11位指数,52位尾数
complex_ complex128 的简写
complex64 由两个32位浮点(实部和虚部)组成的复数
complex128 由两个64位浮点(实部和虚部)组成的复数

此外,Intel平台相关的C整数类型 shortlonglong long 和它们的无符号版本是有定义的。

NumPy 数组对象

NumPy中的 ndarray 是一个多维数组对象,该对象由两部分组成:

  • 实际的数据;
  • 描述这些数据的元数据。

大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据。

数组对象的创建

  • 第一种就是创建数组的方式:使用array函数从常规的 list, tuple等格式的数据转创建为ndarray, 默认创建一个新的数组,所创建的数组类型由原序列中的元素类型推导而来。
  • 第二种方法的应用场景是很多时候我们对所创建的数组内的元素未知,但数组的大小已知。针对这种情况,NumPy提供了一些使用占位符创建数组的函数,也就是说一个常量值初始化一个数组。比如:用函数zeros可创建一个全是0的数组,用函数ones可创建一个全为1的数组,函数empty创建一个内容随机并且依赖与内存状态的数组(默认数组类型(dtype)为float64)。这些函数有助于满足除了数组扩展的需要,同时降低了高昂的运算开销。
  • 第三种常见的创建数组的方法.我们可以使用 arange方法,创建数组序列。
  • 第四种创建随机数组
    最后,创建具有随机数字的数组通常是非常有用的。 np.random模块包含许多可用于此效果的函数,例如,这将生成一个从标准正态分布(0均值和方差1)中抽取的5个随机样本数组:
生成函数 作用
np.array( x )np.array( x, dtype ) 将输入数据转化为一个ndarray将输入数据转化为一个类型为type的ndarray
np.asarray( array ) 将输入数据转化为一个新的(copy)ndarray
np.ones( N )np.ones( N, dtype)np.ones_like( ndarray ) 生成一个N长度的一维全一ndarray生成一个N长度类型是dtype的一维全一ndarray生成一个形状与参数相同的全一ndarray
np.zeros( N)np.zeros( N, dtype)np.zeros_like(ndarray) 生成一个N长度的一维全零ndarray生成一个N长度类型位dtype的一维全零ndarray类似np.ones_like( ndarray )
np.empty( N )np.empty( N, dtype)np.empty(ndarray) 生成一个N长度的未初始化一维ndarray生成一个N长度类型是dtype的未初始化一维ndarray类似np.ones_like( ndarray )
np.eye( N )np.identity( N ) 创建一个N * N的单位矩阵(对角线为1,其余为0)
np.arange( num)np.arange( begin, end)np.arange( begin, end, step) 生成一个从0到num-1步数为1的一维ndarray生成一个从begin到end-1步数为1的一维ndarray生成一个从begin到end-step的步数为step的一维ndarray
np.mershgrid(ndarray, ndarray,...) 生成一个ndarray * ndarray * ...的多维ndarray
np.where(cond, ndarray1, ndarray2) 根据条件cond,选取ndarray1或者ndarray2,返回一个新的ndarray
np.in1d(ndarray, [x,y,...]) 检查ndarray中的元素是否等于[x,y,...]中的一个,返回bool数组
np.zeros(5,dtype=int)
Out[8]: array([0, 0, 0, 0, 0])
np.zeros(5,dtype=complex)
Out[9]: array([0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j])
np.zeros((2,3),int)
Out[10]:
array([[0, 0, 0],
       [0, 0, 0]])
np.ones((2, 3))
Out[11]:
array([[1., 1., 1.],
       [1., 1., 1.]])
arr2 = np.array([1.1,1.2,1.3,1.4,1.5])
arr2
Out[13]: array([1.1, 1.2, 1.3, 1.4, 1.5])
np.ones_like(arr2)
Out[14]: array([1., 1., 1., 1., 1.])
np.zeros_like(arr2)
Out[15]: array([0., 0., 0., 0., 0.])
np.linspace(0, 1, 12,endpoint=False,retstep=True)
Out[16]:
(array([0.        , 0.08333333, 0.16666667, 0.25      , 0.33333333,
        0.41666667, 0.5       , 0.58333333, 0.66666667, 0.75      ,
        0.83333333, 0.91666667]), 0.08333333333333333)
np.linspace(0, 1, 12,endpoint=False,retstep=False)
Out[17]:
array([0.        , 0.08333333, 0.16666667, 0.25      , 0.33333333,
       0.41666667, 0.5       , 0.58333333, 0.66666667, 0.75      ,
       0.83333333, 0.91666667])
np.linspace(2.0, 3.0, num=5, retstep=True)
Out[18]: (array([2.  , 2.25, 2.5 , 2.75, 3.  ]), 0.25)
np.empty((2,3))
Out[19]:
array([[1., 1., 1.],
       [1., 1., 1.]])
np.eye(4, 3) #创建一个对角线为 1 其他为 0 的矩阵
Out[20]:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.],
       [0., 0., 0.]])
np.identity(3)   #创建一个主对角线为 1 其他为 0 的方阵.
Out[21]:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
c=np.arange(10,30,5)
c
Out[23]: array([10, 15, 20, 25])
d=np.random.randn(7)
d
Out[25]:
array([-2.42305704, -1.4176937 , -1.30105816, -0.2540588 , -0.01241032,
       -0.79794669,  0.71402996])
e=np.random.normal(10,3,(2,4))
e
Out[27]:
array([[10.12814319, 11.56238839, 10.75997039,  9.09078182],
       [12.16908517, 13.34197263,  7.9504137 , 11.87499528]])

b = np.arange(24).reshape(6,4)

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

Out[30]: b.ravel()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

Out[31]: b.flatten()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

  NumPy.ndarray的属性

ndarray对象属性有:

  • ndarray.ndim

数组轴的个数,在python的世界中,轴的个数被称作秩

  • ndarray.shape

数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性

  • ndarray.size

数组元素的总个数,等于shape属性中元组元素的乘积。

  • ndarray.dtype

一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型。

  • ndarray.itemsize

数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如,一个元素类型为complex32的数组item属性为4(=32/8).

  • ndarray.data

包含实际数组元素的缓冲区,通常我们不需要使用这个属性,因为我们总是通过索引来使用数组中的元素。

一个例子

>>> from numpy  import *
>>> a = 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
'int32'
>>> a.itemsize
4
>>> a.size
15
>>> type(a)
numpy.ndarray
>>> b = array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
numpy.ndarray
ndarray.ndim 获取ndarray的维数
ndarray.shape 获取ndarray各个维度的长度
ndarray.dtype 获取ndarray中元素的数据类型
ndarray.T 简单转置矩阵ndarray

  NumPy.ndarray的函数

基本运算

数组的算术运算是按元素的。新的数组被创建并且被结果填充。

>>> a = array( [20,30,40,50] )
>>> b = arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([True, True, False, False], dtype=bool)

不像许多矩阵语言,NumPy中的乘法运算符 * 指示按元素计算,矩阵乘法可以使用 dot 函数或创建矩阵对象实现(参见教程中的矩阵章节)

>>> A = array( [[1,1],
...             [0,1]] )
>>> B = array( [[2,0],
...             [3,4]] )
>>> A*B                         # elementwise product
array([[2, 0],
       [0, 4]])
>>> dot(A,B)                    # matrix product
array([[5, 4],
       [3, 4]])

有些操作符像 +=*= 被用来更改已存在数组而不创建一个新的数组。

>>> a = ones((2,3), dtype=int)
>>> b = random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b += a
>>> b
array([[ 3.69092703,  3.8324276 ,  3.0114541 ],
       [ 3.18679111,  3.3039349 ,  3.37600289]])
>>> a += b                                  # b is converted to integer type
>>> a
array([[6, 6, 6],
       [6, 6, 6]])

当运算的是不同类型的数组时,结果数组和更普遍和精确的已知(这种行为叫做upcast)。

>>> a = ones(3, dtype=int32)
>>> b = linspace(0,pi,3)
>>> b.dtype.name
'float64'
>>> c = a+b
>>> c
array([ 1.        ,  2.57079633,  4.14159265])
>>> c.dtype.name
'float64'
>>> d = exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
       -0.54030231-0.84147098j])
>>> d.dtype.name
'complex128' 许多非数组运算,如计算数组所有元素之和,被作为ndarray类的方法实现

>>> a = random.random((2,3))
>>> a
array([[ 0.6903007 ,  0.39168346,  0.16524769],
       [ 0.48819875,  0.77188505,  0.94792155]])
>>> a.sum()
3.4552372100521485
>>> a.min()
0.16524768654743593
>>> a.max()
0.9479215542670073

这些运算默认应用到数组好像它就是一个数字组成的列表,无关数组的形状。然而,指定 axis 参数你可以吧运算应用到数组指定的轴上:

>>> b = arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)                            # sum of each column
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)                            # min of each row
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)                         # cumulative sum along each row
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])
计算函数 说明
ndarray.mean( axis=0 ) 求平均值
ndarray.sum( axis= 0) 求和
ndarray.cumsum( axis=0)ndarray.cumprod( axis=0) 累加 累乘
ndarray.std()ndarray.var() 方差标准差
ndarray.max()ndarray.min() 最大值最小值
ndarray.argmax()ndarray.argmin() 最大值索引最小值索引
ndarray.any()ndarray.all() 是否至少有一个True是否全部为True
ndarray.dot( ndarray) 计算矩阵内积

形状操作

更改数组的形状

函数 说明
ndarray.astype(dtype) 转换类型,若转换失败则会出现TypeError
ndarray.copy() 复制一份ndarray(新的内存空间)
ndarray.reshape((N,M,...)) 将ndarray转化为NM...的多维ndarray(非copy)
ndarray.transpose((xIndex,yIndex,...)) 根据维索引xIndex,yIndex...进行矩阵转置,依赖于shape,不能用于一维矩阵(非copy)
ndarray.swapaxes(xIndex,yIndex) 交换维度(非copy)

一个数组的形状由它每个轴上的元素个数给出:

>>> a = floor(10*random.random((3,4)))
>>> a
array([[ 7.,  5.,  9.,  3.],
       [ 7.,  2.,  7.,  8.],
       [ 6.,  8.,  3.,  2.]])
>>> a.shape
(3, 4)

一个数组的形状可以被多种命令修改:

>>> a.ravel() # flatten the array
array([ 7.,  5.,  9.,  3.,  7.,  2.,  7.,  8.,  6.,  8.,  3.,  2.])
>>> a.shape = (6, 2)
>>> a.transpose()
array([[ 7.,  9.,  7.,  7.,  6.,  3.],
       [ 5.,  3.,  2.,  8.,  8.,  2.]])

ravel() 展平的数组元素的顺序通常是“C风格”的,就是说,最右边的索引变化得最快,所以元素a[0,0]之后是a[0,1]。如果数组被改变形状(reshape)成其它形状,数组仍然是“C风格”的。NumPy通常创建一个以这个顺序保存数据的数组,所以 ravel() 将总是不需要复制它的参数 3 。但是如果数组是通过切片其它数组或有不同寻常的选项时,它可能需要被复制。函数 reshape()ravel() 还可以被同过一些可选参数构建成FORTRAN风格的数组,即最左边的索引变化最快。

reshape 函数改变参数形状并返回它,而 resize 函数改变数组自身。

>>> a
array([[ 7.,  5.],
       [ 9.,  3.],
       [ 7.,  2.],
       [ 7.,  8.],
       [ 6.,  8.],
       [ 3.,  2.]])
>>> a.resize((2,6))
>>> a
array([[ 7.,  5.,  9.,  3.,  7.,  2.],
       [ 7.,  8.,  6.,  8.,  3.,  2.]])

如果在改变形状操作中一个维度被给做-1,其维度将自动被计算

组合(stack)不同的数组

几种方法可以沿不同轴将数组堆叠在一起:

>>> a = floor(10*random.random((2,2)))
>>> a
array([[ 1.,  1.],
       [ 5.,  8.]])
>>> b = floor(10*random.random((2,2)))
>>> b
array([[ 3.,  3.],
       [ 6.,  0.]])
>>> vstack((a,b))
array([[ 1.,  1.],
       [ 5.,  8.],
       [ 3.,  3.],
       [ 6.,  0.]])
>>> hstack((a,b))
array([[ 1.,  1.,  3.,  3.],
       [ 5.,  8.,  6.,  0.]])

函数 column_stack 以列将一维数组合成二维数组,它等同与 vstack 对一维数组。

>>> column_stack((a,b))   # With 2D arrays
array([[ 1.,  1.,  3.,  3.],
       [ 5.,  8.,  6.,  0.]])
>>> a=array([4.,2.])
>>> b=array([2.,8.])
>>> a[:,newaxis]  # This allows to have a 2D columns vector
array([[ 4.],
       [ 2.]])
>>> column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4.,  2.],
       [ 2.,  8.]])
>>> vstack((a[:,newaxis],b[:,newaxis])) # The behavior of vstack is different
array([[ 4.],
       [ 2.],
       [ 2.],
       [ 8.]])

row_stack 函数,另一方面,将一维数组以行组合成二维数组。

对那些维度比二维更高的数组, hstack 沿着第二个轴组合, vstack 沿着第一个轴组合, concatenate 允许可选参数给出组合时沿着的轴。

Note

在复杂情况下, r_[]c_[] 对创建沿着一个方向组合的数很有用,它们允许范围符号(“:”):

>>> r_[1:4,0,4]
array([1, 2, 3, 0, 4])

当使用数组作为参数时, r_c_ 的默认行为和 vstackhstack 很像,但是允许可选的参数给出组合所沿着的轴的代号。

将一个数组分割(split)成几个小数组

使用 hsplit 你能将数组沿着它的水平轴分割,或者指定返回相同形状数组的个数,或者指定在哪些列后发生分割:

>>> a = floor(10*random.random((2,12)))
>>> a
array([[ 8.,  8.,  3.,  9.,  0.,  4.,  3.,  0.,  0.,  6.,  4.,  4.],
       [ 0.,  3.,  2.,  9.,  6.,  0.,  4.,  5.,  7.,  5.,  1.,  4.]])
>>> hsplit(a,3)   # Split a into 3
[array([[ 8.,  8.,  3.,  9.],
       [ 0.,  3.,  2.,  9.]]), array([[ 0.,  4.,  3.,  0.],
       [ 6.,  0.,  4.,  5.]]), array([[ 0.,  6.,  4.,  4.],
       [ 7.,  5.,  1.,  4.]])]
>>> hsplit(a,(3,4))   # Split a after the third and the fourth column
[array([[ 8.,  8.,  3.],
       [ 0.,  3.,  2.]]), array([[ 9.],
       [ 9.]]), array([[ 0.,  4.,  3.,  0.,  0.,  6.,  4.,  4.],
       [ 6.,  0.,  4.,  5.,  7.,  5.,  1.,  4.]])]

vsplit 沿着纵向的轴分割, array split 允许指定沿哪个轴分割。

ndarray索引/切片方式

ndarray[n] 选取第n+1个元素
ndarray[n:m] 选取第n+1到第m个元素
ndarray[:] 选取全部元素
ndarray[n:] 选取第n+1到最后一个元素
ndarray[:n] 选取第0到第n个元素
ndarray[ bool_ndarray ]注:bool_ndarray表示bool类型的ndarray 选取为true的元素
ndarray[[x,y,m,n]]... 选取顺序和序列为x、y、m、n的ndarray
ndarray[n,m]ndarray[n][m] 选取第n+1行第m+1个元素
ndarray[n,m,...]ndarray[n][m].... 选取n行n列....的元素

当少于轴数的索引被提供时,确失的索引被认为是整个切片:

>>> b[-1]                                  # the last row. Equivalent to b[-1,:]
array([40, 41, 42, 43])

b[i] 中括号中的表达式被当作 i 和一系列 : ,来代表剩下的轴。NumPy也允许你使用“点”像 b[i,...]

点 (…)代表许多产生一个完整的索引元组必要的分号。如果x是秩为5的数组(即它有5个轴),那么:

  • x[1,2,…] 等同于 x[1,2,:,:,:],
  • x[…,3] 等同于 x[:,:,:,:,3]
  • x[4,…,5,:] 等同 x[4,:,:,5,:].

Numpy的常用函数

矩阵函数 说明
np.diag( ndarray)np.diag( [x,y,...]) 以一维数组的形式返回方阵的对角线(或非对角线)元素将一维数组转化为方阵(非对角线元素为0)
np.dot(ndarray, ndarray) 矩阵乘法
np.trace( ndarray) 计算对角线元素的和
排序函数 说明
np.sort( ndarray) 排序,返回副本
np.unique(ndarray) 返回ndarray中的元素,排除重复元素之后,并进行排序
np.intersect1d( ndarray1, ndarray2)np.union1d( ndarray1, ndarray2)np.setdiff1d( ndarray1, ndarray2)np.setxor1d( ndarray1, ndarray2) 返回二者的交集并排序。返回二者的并集并排序。返回二者的差。返回二者的对称差
一元计算函数 说明
np.abs(ndarray)np.fabs(ndarray) 计算绝对值计算绝对值(非复数)
np.mean(ndarray) 求平均值
np.sqrt(ndarray) 计算x^0.5
np.square(ndarray) 计算x^2
np.exp(ndarray) 计算e^x
log、log10、log2、log1p 计算自然对数、底为10的log、底为2的log、底为(1+x)的log
np.sign(ndarray) 计算正负号:1(正)、0(0)、-1(负)
np.ceil(ndarray)np.floor(ndarray)np.rint(ndarray) 计算大于等于改值的最小整数计算小于等于该值的最大整数四舍五入到最近的整数,保留dtype
np.modf(ndarray) 将数组的小数和整数部分以两个独立的数组方式返回
np.isnan(ndarray) 返回一个判断是否是NaN的bool型数组
np.isfinite(ndarray)np.isinf(ndarray) 返回一个判断是否是有穷(非inf,非NaN)的bool型数组返回一个判断是否是无穷的bool型数组
cos、cosh、sin、sinh、tan、tanh 普通型和双曲型三角函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函数和双曲型反三角函数
np.logical_not(ndarray) 计算各元素not x的真值,相当于-ndarray
多元计算函数 说明
np.add(ndarray, ndarray)np.subtract(ndarray, ndarray)np.multiply(ndarray, ndarray)np.divide(ndarray, ndarray)np.floor_divide(ndarray, ndarray)np.power(ndarray, ndarray)np.mod(ndarray, ndarray) 相加相减乘法除法圆整除法(丢弃余数)次方求模
np.maximum(ndarray, ndarray)np.fmax(ndarray, ndarray)np.minimun(ndarray, ndarray)np.fmin(ndarray, ndarray) 求最大值求最大值(忽略NaN)求最小值求最小值(忽略NaN)
np.copysign(ndarray, ndarray) 将参数2中的符号赋予参数1
np.greater(ndarray, ndarray)
np.greater_equal(ndarray, ndarray)
np.less(ndarray, ndarray)
np.less_equal(ndarray, ndarray)
np.equal(ndarray, ndarray)
np.not_equal(ndarray, ndarray)
>
>=<br><<br><=
==
!=
logical_and(ndarray, ndarray)
logical_or(ndarray, ndarray)
logical_xor(ndarray, ndarray)
&
|
^
np.dot( ndarray, ndarray) 计算两个ndarray的矩阵内积
np.ix_([x,y,m,n],...) 生成一个索引器,用于Fancy indexing(花式索引)
文件读写 说明
np.save(string, ndarray) 将ndarray保存到文件名为 [string].npy 的文件中(无压缩)
np.savez(string, ndarray1, ndarray2, ...) 将所有的ndarray压缩保存到文件名为[string].npy的文件中
np.savetxt(sring, ndarray, fmt, newline=‘\n‘) 将ndarray写入文件,格式为fmt
np.load(string) 读取文件名string的文件内容并转化为ndarray对象(或字典对象)
np.loadtxt(string, delimiter) 读取文件名string的文件内容,以delimiter为分隔符转化为ndarray

NumPy.random函数和属性

函数 说明
seed()seed(int)seed(ndarray) 确定随机数生成种子
permutation(int)permutation(ndarray) 返回一个一维从0~9的序列的随机排列返回一个序列的随机排列
shuffle(ndarray) 对一个序列就地随机排列
rand(int)randint(begin,end,num=1) 产生int个均匀分布的样本值从给定的begin和end随机选取num个整数
randn(N, M, ...) 生成一个NM...的正态分布(平均值为0,标准差为1)的ndarray
normal(size=(N,M,...)) 生成一个NM...的正态(高斯)分布的ndarray
beta(ndarray1,ndarray2) 产生beta分布的样本值,参数必须大于0
chisquare() 产生卡方分布的样本值
gamma() 产生gamma分布的样本值
uniform() 产生在[0,1)中均匀分布的样本值

NumPy.linalg函数和属性

函数 说明
det(ndarray) 计算矩阵列式
eig(ndarray) 计算方阵的本征值和本征向量
inv(ndarray)pinv(ndarray) 计算方阵的逆计算方阵的Moore-Penrose伪逆
qr(ndarray) 计算qr分解
svd(ndarray) 计算奇异值分解svd
solve(ndarray) 解线性方程组Ax = b,其中A为方阵
lstsq(ndarray) 计算Ax=b的最小二乘解

函数和方法(method)总览

这是个NumPy函数和方法分类排列目录。

创建数组

arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r , zeros, zeros_like 

转化

astype, atleast 1d, atleast 2d, atleast 3d, mat 

操作

array split, column stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack 

询问

all, any, nonzero, where 

排序

argmax, argmin, argsort, max, min, ptp, searchsorted, sort 

运算

choose, compress, cumprod, cumsum, inner, fill, imag, prod, put, putmask, real, sum 

基本统计

cov, mean, std, var 

基本线性代数

cross, dot, outer, svd, vdot

原文地址:https://www.cnblogs.com/yangliguo/p/8969949.html

时间: 2024-10-08 07:06:16

Numpy详解的相关文章

python numpy详解

numpy引用 import numpy as np N维数组对象 np.array([0,1,2,3,4],[9,8,7,6,5,4]) np.array()生成一个ndarray数组 np.array()输出成[ ]形式,元素由空格分隔 ndarry对象的属性 .ndim 秩,即轴的数量或维度的数量 .shape ndarry对象的尺度,对于矩阵,n行m列 .size ndarry对象元素的个数,相当于.shape中n*m的值 .dtype ndarry对象的元素类型 .itemsize n

Heapsort 堆排序算法详解(Java实现)

Heapsort (堆排序)是最经典的排序算法之一,在google或者百度中搜一下可以搜到很多非常详细的解析.同样好的排序算法还有quicksort(快速排序)和merge sort(归并排序),选择对这个算法进行分析主要是因为它用到了一个非常有意思的算法技巧:数据结构 - 堆.而且堆排其实是一个看起来复杂其实并不复杂的排序算法,个人认为heapsort在机器学习中也有重要作用.这里重新详解下关于Heapsort的方方面面,也是为了自己巩固一下这方面知识,有可能和其他的文章有不同的入手点,如有错

人脸验证算法Joint Bayesian详解及实现(Python版)

人脸验证算法Joint Bayesian详解及实现(Python版) Tags: JointBayesian DeepLearning Python 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如对代码有兴趣的请移步我的 Github. 如需转载,请附上本文链接,不甚感激!  http://blog.csdn.net/cyh_24/article/details/49059475 Bayesian Face Revis

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参考本文第一部分的算法简介. 经详细注释的代码:放在我的gith

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43225445 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Convolutional Neural Networks (LeNet).经详细注释的代码和原始代码:放在我的github地址上,可下载. 一.CNN卷积神经网络原理

DeepLearning tutorial(1)Softmax回归原理简介+代码详解

DeepLearning tutorial(1)Softmax回归原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43157801 本文介绍Softmax回归算法,特别是详细解读其代码实现,基于python theano,代码来自:Classifying MNIST digits using Logistic Regression,参考UFLDL. 一.Softmax回归简介 关于算法的详

AdaBoost算法详解与实战

[原创]Liu_LongPo 转载请注明出处 [CSDN]http://blog.csdn.net/llp1992 AdaBoost算法是基于单层决策树等弱分类算法的强学习分类算法.单层决策树算法也是一种分类算法,但是其分类效果较差,只根据一个特征进行数据划分,因此单层决策树算法被称为弱分类算法:而AdaBoost算法通过将多个弱分类算法串行训练而成,属于强分类算法. AdaBoost算法是boosting算法的一种,它所串联的弱分类器一般都是一致的,而且它训练是的关注点在于被之前分类器分错的数

Linux 包管理工具 pip 使用详解

1. pip install 安装软件 [[email protected] ~]$ pip install somepackage [...] Successfully installed somepackage 参数:--upgrade 升级某包 2. pip show 查看已安装的软件(以matplotlib为例子) [[email protected] ~]$ pip show matplotlib --- Metadata-Version: 1.1 Name: matplotlib V

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),本文介绍了CART用于离散标签分类决策和连续特征回归时的原理.决策树创建过程分析了信息混乱度度量Gini指数.连续和离散特征的特殊处理.连续和离散特征共存时函数的特殊处理和后剪枝:用于回归时则介绍了回归树和模型树的原理.适用场景和创建过程.个人认为,回归树和模型树