创建矩阵
对于python中的numpy模块,一般用其提供的ndarray对象。 创建一个ndarray对象很简单,只要将一个list作为参数即可。 例如
import numpy as np #引入numpy库 #创建一维的narray对象 a = np.array([1,2,3,4,5]) #创建二维的narray对象 a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]]) #创建多维对象以其类推获取矩阵行数列数
import numpy as np a = np.array([[1,2,3,4,5],[6,7,8,9,10]]) print(a.shape) #结果返回一个tuple元组 (2L, 5L) print(a.shape[0]) #获得行数,返回 2 print(a.shape[1]) #获得列数,返回 5矩阵截取
//行列截取
import numpy as np a = np.array([[1,2,3,4,5],[6,7,8,9,10]]) print(a[0:1]) #截取第一行,返回 [[1 2 3 4 5]] print(a[1,2:5]) #截取第二行,第三、四列,返回 [8 9] print(a[1,:]) #截取第二行,返回 [ 6 7 8 9 10]
import numpy as np
//条件截取 a = np.array([[1,2,3,4,5],[6,7,8,9,10]]) b = a[a>6] # 截取矩阵a中大于6的元素,范围的是一维数组 print(b) # 返回 [ 7 8 9 10] # 其实布尔语句首先生成一个布尔矩阵,将布尔矩阵传入[](方括号)实现截取 print(a>6) # 返回 [[False False False False False] [False True True True True]]
import numpy as np a = np.array([[1,2,3,4,5],[6,7,8,9,10]]) print(a) #开始矩阵为 [[ 1 2 3 4 5] [ 6 7 8 9 10]] a[a>6] = 0 print(a) #大于6清零后矩阵为 [[1 2 3 4 5] [6 0 0 0 0]]
矩阵合并
import numpy as np a1 = np.array([[1,2],[3,4]]) a2 = np.array([[5,6],[7,8]]) #!注意 参数传入时要以列表list或元组tuple的形式传入 print(np.hstack([a1,a2])) #横向合并,返回结果如下 [[1 2 5 6] [3 4 7 8]] print(np.vstack((a1,a2))) #纵向合并,返回结果如下 [[1 2] [3 4] [5 6] [7 8]]通过函数矩阵
arange
import numpy as np a = np.arange(10) # 默认从0开始到10(不包括10),步长为1 print(a) # 返回 [0 1 2 3 4 5 6 7 8 9] a1 = np.arange(5,10) # 从5开始到10(不包括10),步长为1 print(a1) # 返回 [5 6 7 8 9] a2 = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2 print(a2) # 返回 [ 5 7 9 11 13 15 17 19]
linspace
linspace()和matlab的linspace很类似,用于创建指定数量等间隔的序列,实际生成一个等差数列。
import numpy as np a = np.linspace(0,10,7) # 生成首位是0,末位是10,含7个数的等差数列 print(a) # 结果 [ 0. 1.66666667 3.33333333 5. 6.66666667 8.33333333 10. ]
logspace
linspace用于生成等差数列,而logspace用于生成等比数列。
下面的例子用于生成首位是100,末位是102,含5个数的等比数列。
import numpy as np a = np.logspace(0,2,5) print(a) # 结果 [ 1. 3.16227766 10. 31.6227766 100. ]
ones、zeros、eye、empty
ones创建全1矩阵
zeros创建全0矩阵
eye创建单位矩阵
empty创建空矩阵(实际有值)
import numpy as np a_ones = np.ones((3,4)) # 创建3*4的全1矩阵 print(a_ones) # 结果 [[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]] a_zeros = np.zeros((3,4)) # 创建3*4的全0矩阵 print(a_zeros) # 结果 [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] a_eye = np.eye(3) # 创建3阶单位矩阵 print(a_eye) # 结果 [ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] a_empty = np.empty((3,4)) # 创建3*4的空矩阵 print(a_empty) # 结果 [[ 1.78006111e-306 -3.13259416e-294 4.71524461e-309 1.94927842e+289] [ 2.10230387e-309 5.42870216e+294 6.73606381e-310 3.82265219e-297] [ 6.24242356e-309 1.07034394e-296 2.12687797e+183 6.88703165e-315]]
fromstring
fromstring()方法可以将字符串转化成ndarray对象,需要将字符串数字化时这个方法比较有用,可以获得字符串的ascii码序列。
a = "abcdef" b = np.fromstring(a,dtype=np.int8) # 因为一个字符为8为,所以指定dtype为np.int8 print(b) # 返回 [ 97 98 99 100 101 102]
fromfunction
fromfunction()方法可以根据矩阵的行号列号生成矩阵的元素。
例如创建一个矩阵,矩阵中的每个元素都为行号和列号的和。
import numpy as np def func(i,j): return i+j a = np.fromfunction(func,(5,6)) # 第一个参数为指定函数,第二个参数为列表list或元组tuple,说明矩阵的大小 print(a) # 返回 [[ 0. 1. 2. 3. 4. 5.] [ 1. 2. 3. 4. 5. 6.] [ 2. 3. 4. 5. 6. 7.] [ 3. 4. 5. 6. 7. 8.] [ 4. 5. 6. 7. 8. 9.]] #注意这里行号的列号都是从0开始的