有事没事领个红包

读书笔记3数组的一些常用函数

一、产生一些常用数组

ones((m,n),dtype),zeros((m,n),dtype),empty((m,n),dtype),eye(n),random.randn(m,n)

x = ones((M,N), dtype=’int32’) # 32-bit integers

print np.ones((2,3)),'\n'
print np.zeros((2,3)),'\n';
print np.empty((2,3)),'\n'
print np.eye(4)


[[ 1.  1.  1.]
 [ 1.  1.  1.]] 

[[ 0.  0.  0.]
 [ 0.  0.  0.]] 

[[ 0.  0.  0.]
 [ 0.  0.  0.]] 

[[ 1.  0.  0.  0.]
 [ 0.  1.  0.  0.]
 [ 0.  0.  1.  0.]
 [ 0.  0.  0.  1.]]

二、类型转换

asarray#讲矩阵转换成数组形式

asmatrix#将数组转换成矩阵形式

2、矩阵的逆和矩阵的秩

A.I#求的是矩阵的逆

np.linalg.det(A)#求的是数组的秩

3、size(A)返回数组元素总数

4、random.randn(m,n)产生随机数组

5、tile(A,(m,n))用A来填充成m*n个A组成的数组,

a=np.reshape(np.arange(10),(2,5))
print a
b=np.tile(a,(3,2))
print b
​
[[0 1 2 3 4]
 [5 6 7 8 9]]
[[
0 1 2 3 4 0 1 2 3 4] [5 6 7 8 9 5 6 7 8 9] [0 1 2 3 4 0 1 2 3 4] [5 6 7 8 9 5 6 7 8 9] [0 1 2 3 4 0 1 2 3 4] [5 6 7 8 9 5 6 7 8 9]]

6、ravel(A)将原始数组或矩阵返回成一维的数组形式,只是更改了视图,并没有复制数据

a=np.mat(np.ones((2,3)))
c= np.ravel(a)
b=np.ones((2,3));
d= np.ravel(b)
print type(c)
print type(d)
print c.shape
print d.shape

<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
(6L,)
(6L,)

7、flatten和ravel类似的功能,只不过flatten是通过复制数组的,而且不会改变数组或矩阵类型

a=np.mat(np.ones((2,3)))
c=np.ndarray.flatten(a)
​
print a
print c
c=np.ravel(c)
c[3]=20
print a
print c
[[ 1.  1.  1.]
 [ 1.  1.  1.]]
[[ 1.  1.  1.  1.  1.  1.]]
[[ 1.  1.  1.]
 [ 1.  1.  1.]]
[  1.   1.   1.  20.   1.   1.]

8、分割split, vsplit(A,t), hsplit。返回的是一个各个片段组成的列表

如果t是一个数,则均匀分成t份,如果t是一个矢量,则将分成几段

例如[2,5,8]则分成,[:2],[2:5],[5:8],[8:]

9、删除数据delete(x,[],axis)如果axis没有,则相当于在一个一位数组中删除后边列表里的数据,如果axis有数据,则在相应的坐标轴上删除行或列

axis=0表示在行上删除,axis=1表示在列上删除

>>> x = reshape(arange(20),(4,5))
>>> delete(x,1,0) # Same as x[[0,2,3]]
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
>>> delete(x,[2,3],1) # Same as x[:,[0,1,4]]
array([[ 0, 1, 4],
[ 5, 6, 9],
[10, 11, 14],
[15, 16, 19]])
>>> delete(x,[2,3]) # Same as hstack((x.flat[:2],x.flat[4:]))
array([ 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19])

10、squeeze 移除没有数据的多余维
>>> x = ones((5,1,5,1))
>>> shape(x)
(5L, 1L, 5L, 1L)
>>> y = x.squeeze()
>>> shape(y)
(5L, 5L)
>>> y = squeeze(x)

 

11、fliplr, flipud数组翻转

>>> x = reshape(arange(4),(2,2))
>>> x
array([[0, 1],
[2, 3]])
>>> fliplr(x)
array([[1, 0],
[3, 2]])
>>> flipud(x)
array([[2, 3],
[0, 1]])

12、diag会根据输入的不同而不同,

>>> x = reshape(arange(4),(2,2))
>>> x
array([[0, 1],
[2, 3]])
>>> fliplr(x)
array([[1, 0],
[3, 2]])
>>> flipud(x)
array([[2, 3],
[0, 1]])

13、cumsum在指定坐标轴上计算累积和

a=np.arange(1,11)
print a
np.cumsum(a)
[ 1  2  3  4  5  6  7  8  9 10]
Out[24]:
array([ 1,  3,  6, 10, 15, 21, 28, 36, 45, 55])

 

三、线性代数运算

1、solve(A,y),解线性方程组Ax=y,A是可逆的,则x=inv(A)y

>>> X = array([[1.0,2.0,3.0],[3.0,3.0,4.0],[1.0,1.0,4.0]])
>>> y = array([[1.0],[2.0],[3.0]])
>>> solve(X,y)
array([[ 0.625],
[-1.125],
[ 0.875]])

2、最小二乘法lstsq(X,y),解线性方程组Ax= ,A是n*k矩阵,n>k,

第一个是x,第二个是残差,第三个是the rank of X ,第四个是contains the singular values of

>>> X = randn(100,2)
>>> y = randn(100)
>>> lstsq(X,y)
(array([ 0.03414346, 0.02881763]),
array([ 3.59331858]),
2,
array([ 3.045516 , 1.99327863]))array([[ 0.625],
[-1.125],
[ 0.875]])

3、计算数组行列式

np.linalg.det(A)

 

4/、特征值m,n=np.linalg.eig(A),m是特征值,n是特征向量,作为元组返回

>>> x = matrix([[1,.5],[.5,1]])
>>> val,vec = eig(x)
>>> vec*diag(val)*vec.T
matrix([[ 1. , 0.5],
[ 0.5, 1. ]])

5、矩阵的逆np.linalg.inv(A),在python中计算可能没有那么的精确,所以如果仅是判断是不是逆矩阵,可以使用np.allclose方法

a=np.array([[1,2],[3,4]])
b=np.linalg.inv(a);
c=np.dot(a,b)
print c
print np.allclose(c,np.eye(2))
[[
1.00000000e+00 1.11022302e-16] [ 0.00000000e+00 1.00000000e+00]] True

6、计算张量积z = np.kron(x,y)

7、迹np.trace(A)

8/matrix_rank computes the rank of an array using a SVD.

x = np.array([[1,.5],[1,.5]])
np.linalg.matrix_rank(x)
Out[2]:
1

 

posted @ 2016-04-17 22:28  crazyCodeLove  阅读(320)  评论(0编辑  收藏  举报