# -*- coding: utf-8 -*-
"""
Created on Sun May 14 21:16:22 2017
@author: Administrator
"""
import numpy as np
#numpy ndarray 计算全部元素的和、按行求和,按列求和。
a = np.arange(20).reshape(4, 5)
print ("a:")
print (a)
print("sum of all elements in a:" + str(a.sum()))
print ("maximum element in a: " + str(a.max()))
print ("minimum element in a: " + str(a.min()))
print ("maximum element in each row of a: " + str(a.max(axis=1)))
print ("minimum element in each column of a: " + str(a.min(axis = 0)))
#Numpy同时提供了数组、矩阵对象(matrix)
#矩阵对象和数组对象两点差别:
#矩阵是二维的;矩阵的‘*’操作符进行的是矩阵乘法,乘号左边的矩阵列和乘号右侧的矩阵行要相等。
#而在数组中的‘*’操作符进行的是每一元素的对应相乘,乘号两侧的数组每一维大小需要一致。
#数组可以通过asmatrix或者mat转换为矩阵。
print('---------------------------------------')
a = np.arange(20).reshape(4, 5)
a = np.asmatrix(a)
print (type(a))
b = np .matrix('1.0 2.0;3.0 4.0')
print (type(b))
#矩阵乘法, arange(起始,终止,步长)
b = np.arange(2, 45, 3).reshape(5, 3)
b = np.mat(b)
print (b)
print(type(b))
#指定一维数组的长度
x = np.linspace(0, 2, 9)
print (x)
print (type(x))
#矩阵乘法
print ("matrix a:")
print (a)
print ("matrix b:")
print (b)
print ("matrix c:")
c = a * b
print (c)
#数组元素的访问
#数组和矩阵元素的访问可通过下标进行, 以下均以二维数组(或矩阵)为例:
a = np.array([[3.2, 1.5], [2.5, 4]])
print (a[0][1])
print (a[0, 1])
#通过下标访问来修改数组元素的值
b = a
a[0][1] = 2.0
print ("a:")
print (a)
print ("b:")
print (b)
#上面的b是指向a的内容所在的地址,真正的复制使用copy
a = np.array([[3.2, 1.5], [2.5, 4]])
b = a.copy()
a[0][1] = 2.0
print ("a:")
print (a)
print ("b:")
print (b)
print ("a type:" + str(type(a)) +"\nb type:"+ str(type(b)))
#将a指向其他的地址上,b仍然在原来的地址上
a = np.array([[3.2, 1.5], [2.5, 4]])
b = a
a = np.array([[2, 1], [9, 3]])
print ("a:")
print (a)
print ("b:")
print (b)
a = np.arange(20).reshape(4, 5)
print ("a:")
print(a)
print ("the 2nd and 4th column of a:")
print (a[:,[0,1,3]])
print (a[:, 0])
print('---------------------------------------')
#在单行单列上,取出满足某些条件的元素
print (a[:, 2][a[:,0]> 5])
#使用where函数查找特定值在数组中的位置
print(a)
loc = np.where(a==11)
print (loc)
print (a[loc[0][0], loc[1][0]])
#数组操作
a = np.random.rand(2, 4)
print ("a:")
print (a)
a = np.transpose(a)
print ("a is an array, by using transpose(a):")
print (a)
b = np.random.rand(2, 4)
b = np.mat(b)
print ("b:")
print (b)
print ("b is a matrix, by using b.T:")
print (b.T)
#矩阵求逆
import numpy.linalg as nlg
a = np.random.rand(2, 2)
a = np.mat(a)
print ("a:")
print (a)
ia = nlg.inv(a)
print ("inverse of a:")
print (ia)
print ("a* inv(a)")
print (a*ia)
#求特征值和特征向量
a = np.random.rand(3,3)
print("a:")
print (a)
eig_value, eig_vector = nlg.eig(a)
print ("eigen value:")
print (eig_value)
print ("eigen vector:")
print (eig_vector)
#按列拼接两个向量成一个矩形
a = np.array((1, 2, 3))
b = np.array((2, 3, 4))
print (np.column_stack((a, b)))
print('---------------------------------------')
a = np.random.rand(2, 2)
b = np.random.rand(2, 2)
print ("a:")
print (a)
print ("b:")
print (b)
c = np.hstack([a, b])
d = np.vstack([a, b])
print ("horizontal stacking a and b:")
print (c)
print ("vertical stacking a and b:")
print (d)
#缺失值, 通过isnan判断
a = np.random.rand(2, 2)
a[0, 1] = np.nan
print (np.isnan(a))
print(np.nan_to_num(a))
输出:
a:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
sum of all elements in a:190
maximum element in a: 19
minimum element in a: 0
maximum element in each row of a: [ 4 9 14 19]
minimum element in each column of a: [0 1 2 3 4]
---------------------------------------
<class 'numpy.matrixlib.defmatrix.matrix'>
<class 'numpy.matrixlib.defmatrix.matrix'>
[[ 2 5 8]
[11 14 17]
[20 23 26]
[29 32 35]
[38 41 44]]
<class 'numpy.matrixlib.defmatrix.matrix'>
[ 0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
<class 'numpy.ndarray'>
matrix a:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
matrix b:
[[ 2 5 8]
[11 14 17]
[20 23 26]
[29 32 35]
[38 41 44]]
matrix c:
[[ 290 320 350]
[ 790 895 1000]
[1290 1470 1650]
[1790 2045 2300]]
1.5
1.5
a:
[[ 3.2 2. ]
[ 2.5 4. ]]
b:
[[ 3.2 2. ]
[ 2.5 4. ]]
a:
[[ 3.2 2. ]
[ 2.5 4. ]]
b:
[[ 3.2 1.5]
[ 2.5 4. ]]
a type:<class 'numpy.ndarray'>
b type:<class 'numpy.ndarray'>
a:
[[2 1]
[9 3]]
b:
[[ 3.2 1.5]
[ 2.5 4. ]]
a:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
the 2nd and 4th column of a:
[[ 0 1 3]
[ 5 6 8]
[10 11 13]
[15 16 18]]
[ 0 5 10 15]
---------------------------------------
[12 17]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
(array([2], dtype=int64), array([1], dtype=int64))
11
a:
[[ 0.13378024 0.12118504 0.81883353 0.57752247]
[ 0.7774044 0.07725228 0.79392817 0.68216484]]
a is an array, by using transpose(a):
[[ 0.13378024 0.7774044 ]
[ 0.12118504 0.07725228]
[ 0.81883353 0.79392817]
[ 0.57752247 0.68216484]]
b:
[[ 0.09190121 0.49461086 0.32441392 0.36051032]
[ 0.08294519 0.98723508 0.27996493 0.20307041]]
b is a matrix, by using b.T:
[[ 0.09190121 0.08294519]
[ 0.49461086 0.98723508]
[ 0.32441392 0.27996493]
[ 0.36051032 0.20307041]]
a:
[[ 0.7744847 0.60003287]
[ 0.96965063 0.82703688]]
inverse of a:
[[ 14.08797397 -10.22112507]
[-16.5172958 13.1927857 ]]
a* inv(a)
[[ 1.00000000e+00 -8.88178420e-16]
[ 0.00000000e+00 1.00000000e+00]]
a:
[[ 0.75267716 0.96519622 0.36316502]
[ 0.00269269 0.60320442 0.51878785]
[ 0.91322292 0.28138496 0.93459398]]
eigen value:
[ 1.77140763+0.j 0.25953397+0.50413241j 0.25953397-0.50413241j]
eigen vector:
[[-0.57969390+0.j -0.36351645+0.4711016j -0.36351645-0.4711016j ]
[-0.33183110+0.j -0.29100368-0.43056631j -0.29100368+0.43056631j]
[-0.74420636+0.j 0.61306492+0.j 0.61306492-0.j ]]
[[1 2]
[2 3]
[3 4]]
---------------------------------------
a:
[[ 0.79608012 0.11640033]
[ 0.85905787 0.77692935]]
b:
[[ 0.95440984 0.59138443]
[ 0.08498267 0.21850557]]
horizontal stacking a and b:
[[ 0.79608012 0.11640033 0.95440984 0.59138443]
[ 0.85905787 0.77692935 0.08498267 0.21850557]]
vertical stacking a and b:
[[ 0.79608012 0.11640033]
[ 0.85905787 0.77692935]
[ 0.95440984 0.59138443]
[ 0.08498267 0.21850557]]
[[False True]
[False False]]
[[ 0.92392922 0. ]
[ 0.37162311 0.22679525]]