Python-numpy

来源:互联网 发布:淘宝账号为什么会被盗 编辑:程序博客网 时间:2024/05/17 09:40

1.数组特征信息:

NumPy的数组类被称作ndarray。通常被称作数组。

ndarray是一个同种类数据的多维容器,也就是说,它的所有元素都是同类型的。

每一个数组都有一个 shape (表示它每一维大小的元组)和 dtype (一个描述数组数据类型的对象):


ndarray.ndim

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


ndarray.shape

数组的维度。


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

2
3
4
5
6
7
8

import numpy as np
= np.array([[1,2,5],[2,3,5],[3,4,5],[2,3,6]])
# 输出数组的行和列数
print x.shape  # (4, 3)
# 只输出行数
print x.shape[0# 4
# 只输出列数
print x.shape[1# 3


ndarray.size

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


ndarray.dtype

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


import numpy as npndarray.itemsize

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


ndarray.data

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


X.flags    #数组的存储情况信息。

X.T   #如果X是矩阵,发挥的是X的转置矩阵

X.trace()    #计算X的迹

np.linalg.det(a)   #返回的是矩阵a的行列式

np.linalg.norm(a,ord=None)    #计算矩阵a的范数

np.linalg.eig(a)    #矩阵a的特征值和特征向量

np.linalg.cond(a,p=None)    #矩阵a的条件数

np.linalg.inv(a)    #矩阵a的逆矩阵

np.linalg.pinv(a)    #矩阵a的伪逆矩阵


2.创建数组:
使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。
数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等等。

1)最简单的创建数组的方式是使用 array 函数。它接受任何数组对象(包括其它数组),产生一个包含所传递的数据的新NumPy数组。

x=np.array(((1,0,0),(0,1,0),(0,0,1)))           

y=np.array([[1,1,1],[2,2,0],[1,0,0]]) 
print "y array is:\n",y
print "y array's dimision  is:",y.shape
print "y array's ndim  is:",y.ndim
print "y array's size  is:",y.size

2)嵌套序列,如等长列表的列表,将会转化为一个多维数组:
In [16]: data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
In [17]: arr2 = np.array(data2)

3)zeros 和 ones 使用给定的长度或形状分别的创建0 和 1数组。
     empty 会创建一个没有使用特定值来初始化的数组。给这些方法传递一个元组作为形状来创建高维数组.

In [23]: np.zeros(10)
Out[23]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

In [25]: np.empty((2, 3, 2))
Out[25]:
array([[[ 4.94065646e-324, 4.94065646e-324],
        [ 3.87491056e-297, 2.46845796e-130],
        [ 4.94065646e-324, 4.94065646e-324]],
       [[ 1.90723115e+083, 5.73293533e-053],
        [ -2.33568637e+124, -6.70608105e-012],
        [ 4.42786966e+160, 1.27100354e+025]]])

4)

数组构建函数函数描述array转换输入数据(列表,数组或其它序列类型)到一个ndarray,可以推断一个dtype或明确的设置一个dtype。默认拷贝输入数据。asarray转换输入为一个ndarray,当输入已经是一个ndarray时就不拷贝。arange同内建的range函数,但不返回列表而是一个ndarrayones, ones_like根据提供的shape和dtype产生一个全1的数组。ones_like使用另一歌数组为入参,产生一个shape和dtype都相同的数组。zeros, zeros_like同ones和ones_like,但是生成全0的数组empty, enpty_like通过分配新内存来构造新的数组,但不同与ones 和 zeros,不初始任何值。eye, identity生成一个NxN的单位方阵(对角线上为1,其它地方为0)
'''


3.ndarray的数据类型
 你可以使用ndarray的 astype 方法显示的把一个数组的dtype转换或投射 到另外的类型:


In [31]: arr = np.array([1, 2, 3, 4, 5])
In [32]: arr.dtype
Out[32]: dtype('int64')
In [33]: float_arr = arr.astype(np.float64)
In [34]: float_arr.dtype
Out[34]: dtype('float64')

 你可能有一个字符串数组表示的数字,可以使用 astype 把它们转换到数字的形式:
In [38]: numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)In [39]: numeric_strings.astype(float)Out[39]: array([ 1.25, -9.6 , 42. ])


4.range & arange
1)range(start, end, step):
  返回一个list对象,起始值为start,终止值为end,但不含终止值,步长为step。只能创建int型list。

2)arange(start, end, step):

  与range()类似,但是返回一个array对象。需要引入import numpy as np,并且arange可以使用float型数据。
   np.arange(10) : [0 1 2 3 4 5 6 7 8 9]
类似arange:numpy.linspace(start, stop, num, endpoint, retstep, dtype)   在指定的间隔内返回均匀间隔的数字。返回num个均匀分布的样本,在[start, stop],这个区间的端点可以任意的被排除在外。

z=np.arange(1,5,0.5)                     #return array
print "z array is:\n",z

p=range(5)                                #return list
print "p  is:\n",p

'''

#5.数组和纯量间的操作:
     数组非常重要,因为它们使你不使用循环就可以在数据上进行一系列操作。 这通常被叫做矢量化。相同大小的数组间的算术运算,其操作作用在对应的元素上,可以把操作值作用于每一个元素::

1)sum得到数组元素之和,得到的是一个数字。
    #也可以ndarray.sum(axis),分别求每一行或者是每一列的元素之和,axis=0,纵向运算,axis=1,横向运算
    print "y1=:\n",y.sum(1)

2)乘法运算符 * 指示按元素计算 
    x*=3        #矩阵乘法可以使用 dot 函数或创建矩阵对象实现
    print "x*3=:\n",x


6.索引,切片和迭代

一维 数组可以被索引、切片和迭代,就像 列表 和其它Python序列。
>>> a = arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])

>>> a[2]
8

>>> a[2:5]
array([ 8, 27, 64])

>>> a[:6:2] = -1000            ——>   # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])

>>> a[ : :-1]                         ——> # reversed a
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])


_images/slicing-2d.png



7.布尔索引
   布尔算术操作符如 & (and) 和 | (or)、==、!=- 布尔条件
   通过布尔数组设置值工作于一种种常识性的方式。为了设置 data 中所有的负值为0,我们只需要:
In [96]: data[data < 0] = 0In [97]: dataOut[97]:array([[ 0. , 0.5433, 0. , 1.2792],       [ 0. , 0.5465, 0.0939, 0. ],       [ 0. , 0. , 0.7719, 0.3103],       [ 2.1452, 0.8799, 0. , 0.0672],       [ 0. , 0. , 1.1503, 1.7289],       [ 0.1913, 0.4544, 0.4519, 0.5535],       [ 0.5994, 0.8174, 0. , 0. ]])



8.Fancy索引
   Fancy 索引 是一个术语,被NumPy用来描述使用整形数组索引。


9.更改数组类型函数:
reshape   改变形状
transpose 转置
swapaxes  调换维度



10.通用函数:快速的基于元素的数组函数:
Unary ufuncs函数描述abs, fabs计算基于元素的整形,浮点或复数的绝对值。fabs对于没有复数数据的快速版本sqrt计算每个元素的平方根。等价于 arr ** 0.5square计算每个元素的平方。等价于 arr ** 2exp计算每个元素的指数。log, log10, log2, log1p自然对数(基于e),基于10的对数,基于2的对数和 log(1+ x)sign计算每个元素的符号:1(positive),0(zero), -1(negative)ceil计算每个元素的天花板,即大于或等于每个元素的最小值floor计算每个元素的地板,即小于或等于每个元素的最大值rint圆整每个元素到最近的整数,保留dtypemodf分别返回分数和整数部分的数组isnan返回布尔数组标识哪些元素是 NaN (不是一个数)isfinite, isinf分别返回布尔数组标识哪些元素是有限的(non-inf, non-NaN)或无限的cos, cosh, sin sinh, tan, tanhregular 和 hyperbolic 三角函数arccos, arccosh, arcsin, arcsinh, arctan, arctanh反三角函数logical_not计算基于元素的非x的真值。等价于 -arr

接受两个数组(因此,叫做 binary ufuncs)且返回一个数组
Binary universal funcitons
函数描述add在数组中添加相应的元素substract在第一个数组中减去第二个数组multiply对数组元素相乘divide, floor_divide除和地板除(去掉余数)power使用第二个数组作为指数提升第一个数组中的元素maximum, fmax基于元素的最大值。 fmax 忽略 NaNminimum, fmin基于元素的最小值。 fmin 忽略 NaNmod基于元素的模(取余)copysign拷贝第二个参数的符号到第一个参数greater, greater_equal, less, less_equal, not_equal基于元素的比较,产生布尔数组。等价于中缀操作符 >,>=, <, <=,==, !=logical_and, logical_or, logical_xor计算各个元素逻辑操作的真值。等价于中缀操作符 &,|, ^



11.使用数组进行数据处理——使用数组表达式代替显示循环通常被成为“矢量化”

1)函数 numpy.where 是三元表达式 x if condition else y 的矢量化版本

2)数学和统计方法:
      一组数学函数,计算整个数组或一个轴向上数据的统计,和数组函数一样是容易访问的。聚合(通常被称为 reductions ),如sunmean ,标准偏差 std 可以使用数组实例的方法,也可以使用顶层NumPy的函数。

     像 meansun 函数可以有一个可选的 axis 参数,它对给定坐标轴进行统计,结果数组将会减少一个维度:
     数组构建函数方法描述sum对数组的所有或一个轴向上的元素求和。零长度的数组的和为灵。mean算术平均值。灵长度的数组的均值为NaN。std, var标准差和方差,有可选的调整自由度(默认值为n)。min, max最大值和最小值argmin, argmax索引最小和最大元素。cumsum从0元素开始的累计和。cumprod从1元素开始的累计乘。

3)排序:
   像Python的内建列表一样,NumPy数组也可以使用 sort 方法就地排序,多维数组可以通过传递一个坐标轴数到sort ,对一维截面上的数据进行就地排序。



12.数组的文件输入和输出
1)np.savenp.load 是两个主力功能,有效的保存和加载磁盘数据。数组默认保存为未经过压缩的原始二进制数据,文件扩展名为.npy

2)保存和加载 文本文件
    pandas的 read_csvread_table
   np.loadtxt 、np.savatxt
  

13.线性代数
1).制作单位向量
b2=np.identity(5)#建立n*n的单位阵,这只能是一个方阵。
print "b2/n",b2

b3=np.eye(5,M=None,k=0)#建立一个对角线是1其余值为0的矩阵,用k指定对角线的位置。M默认None。
print "b3/n",b3


2)矩阵相关操作

    创建矩阵:np.mat(‘…’)通过字符串格式创建,np.mat(a)通过数组创建,也可用matrix或bmat函数创建

    创建复合矩阵:np.bmat(‘A B’,’AB’),用A和B创建复合矩阵AB(字符串格式)

    创建n*n维单位矩阵:np.eye(n)

    矩阵的转置:A.T

    矩阵的逆矩阵:A.I

    计算协方差矩阵:np.cov(x),np.cov(x,y)

    计算矩阵的迹(对角线元素和):a.trace()

    相关系数:np.corrcoef(x,y)

    给出对角线元素:a.diagonal()


3)线性代数

    numpy.linalg 有一个关于矩阵分解和像转置和行列式等的一个标准集合:

    

常用 numpy.linglg 函数函数描述diag返回一个方阵的对角线(或非对角线)元素为一个一维数组,或者转换一个一维数组到一个方阵(非对角线元素为零)dot矩阵乘积trace计算对角线上元素的和det计算矩阵行列式eig计算方阵的特征值和特征向量inv计算方阵转置pinv计算方阵 Moore-Penrose pseudo-inverse 的转置qr计算 QR 分解svd计算奇异值分解(SVD)solve求解线性系统方程 Ax = b 的x,其中A是一个方阵lstsq计算 y = Xb 的最小二乘解

 如 :矩阵乘法(点积):x.dot(y)           # equivalently   np.dot(x, y)

估计线性模型中的系数:a=np.linalg.lstsq(x,b),有b=a*x

求方阵的逆矩阵:np.linalg.inv(A)

求广义逆矩阵:np.linalg.pinv(A)

求矩阵的行列式:np.linalg.det(A)

解形如AX=b的线性方程组:np.linalg.solve(A,b)

求矩阵的特征值:np.linalg.eigvals(A)

求特征值和特征向量:np.linalg.eig(A)

Svd分解:np.linalg.svd(A)


4).多项式

多项式拟合:poly= np.polyfit(x,a,n),拟合点集a得到n级多项式,其中x为横轴长度,返回多项式的系数

多项式求导函数:np.polyder(poly),返回导函数的系数

得到多项式的n阶导函数:多项式.deriv(m = n)

多项式求根:np.roots(poly)

多项式在某点上的值:np.polyval(poly,x[n]),返回poly多项式在横轴点上x[n]上的值

两个多项式做差运算: np.polysub(a,b)




原创粉丝点击