python在机器学习领域得到广泛应用的重要原因之一是,python拥有庞大而活跃的第三方程序包,依托这些程序包,用户能够方便的完成绝大多数机器学习任务。
import numpy as np
data = np.array([1,2,3,4,5,6,7,8,9])
print('Numpy的1维数组:\n{0}'.format(data))
print('数据类型:%s'%data.dtype)
print('1维数组中各元素扩大10倍:\n{0}'.format(data*10))
print('访问第二个元素:{0}'.format(data[1]))
data = np.array([[1,3,5,7,9],[2,4,6,8,10]])
print('Numpy的2维数组:\n{0}'.format(data))
print('数据类型:%s'%data.dtype)
print('访问2维数组中第一行第二列的元素:{0}'.format(data[0,2]))
print('访问2维数组中第一行第二列值第四列元素:{0}'.format(data[0,2:4]))
print('访问2维数组中第一行上所有元素:{0}'.format(data[0,:]))
执行结果
Numpy的1维数组:
[1 2 3 4 5 6 7 8 9]
数据类型:int32
1维数组中各元素扩大10倍:
[10 20 30 40 50 60 70 80 90]
访问第二个元素:2
Numpy的2维数组:
[[ 1 3 5 7 9]
[ 2 4 6 8 10]]
数据类型:int32
访问2维数组中第一行第二列的元素:5
访问2维数组中第一行第二列值第四列元素:[5 7]
访问2维数组中第一行上所有元素:[1 3 5 7 9]
代码解释:
data=numpy.array()创建数组,以列表的形式赋值,
如:[1,2,3,4,5,6,7,8,9]或者[[1,3,5,7,9],[2,4,6,8,10]] 一维数组data[i] 二维数组data[i,j]
data.dtype返回数组中的元素类型
data.shape返回数组的形状,既几行几列
对data的数学运算作用于全体元素
import numpy as np
data = [[1,2,3,4,5,6,7,8,9],['A','B','C','D','E','F','G','H','I']]
print('data是Python的列表(list):\n{0}'.format(data))
MyArray1 = np.array(data)
print('MyArray1是Numpy的N维数组:\n%s \nMyArray1的形状:%s'%(MyArray1,MyArray1.shape))
执行结果
data是Python的列表(list):
[[1, 2, 3, 4, 5, 6, 7, 8, 9], ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']]
MyArray1是Numpy的N维数组:
[['1' '2' '3' '4' '5' '6' '7' '8' '9']
['A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I']]
MyArray1的形状:(2, 9)
代码解释
numpy数组要求类型要一致,因此python列表转为数组时,数据类型不一致的元素转为相同类型
import numpy as np
MyArray2 = np.arange(10)
print('MyArray2:\n{0}'.format(MyArray2))
print('MyArray2的基本描述统计量:\n均值:%f,标准差:%f,总和:%f,最大值:%f'%(MyArray2.mean(),MyArray2.std(),MyArray2.sum(),MyArray2.max()))
print('MyArray2的累计和:{0}'.format(MyArray2.cumsum()))
print('MyArray2的开平方:{0}'.format(np.sqrt(MyArray2)))
np.random.seed(123)
MyArray3 = np.random.randn(10)
print('MyArray3:\n{0}'.format(MyArray3))
print('MyArray3的排序结果:{0}'.format(np.sort(MyArray3)))
print('MyArray3的四舍五入到最近整数:{0}'.format(np.rint(MyArray3)))
print('MyArray3的各元素正负号:{0}'.format(np.sign(MyArray3)))
print('MyArray3的各元素非负数的显示正,负数显示负:{0}'.format(np.where(MyArray3>0,'正','负')))
print('MyArray3+MyArray2的结果:{0}'.format(MyArray3+MyArray2))
执行结果
MyArray2:
[0 1 2 3 4 5 6 7 8 9]
MyArray2的基本描述统计量:
均值:4.500000,总和:2.872281,最大值:9.000000
MyArray2的累计和:[ 0 1 3 6 10 15 21 28 36 45]
MyArray2的开平方:[0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
MyArray3:
[-1.0856306 0.99734545 0.2829785 -1.50629471 -0.57860025 1.65143654
-2.42667924 -0.42891263 1.26593626 -0.8667404 ]
MyArray3的排序结果:[-2.42667924 -1.50629471 -1.0856306 -0.8667404 -0.57860025 -0.42891263
0.2829785 0.99734545 1.26593626 1.65143654]
MyArray3的四舍五入到最近整数:[-1. 1. 0. -2. -1. 2. -2. -0. 1. -1.]
MyArray3的各元素正负号:[-1. 1. 1. -1. -1. 1. -1. -1. 1. -1.]
MyArray3的各元素非负数的显示正,负数显示负:['负' '正' '正' '负' '负' '正' '负' '负' '正' '负']
MyArray3+MyArray2的结果:[-1.0856306 1.99734545 2.2829785 1.49370529 3.42139975 6.65143654
3.57332076 6.57108737 9.26593626 8.1332596 ]
代码解释
MyArray2 = numpy.arange()用于生成指定范围内取值的一维数组
MyArray2.mean()计算数组元素的均值
MyArray2.std()计算数组元素的标准差
MyArray2.sum()计算数组元素的总和
MyArray2.max()计算数组元素的最大值
MyArray2.cumsum()计算数组元素的当前累计和
numpy.sqrt(MyArray2)对数组元素开平方
numpy.random.seed(123)指定随机数的种子,确保每次运行程序生成的随机数是一样的
MyArray3 = numpy.random.randn(10)生成包含10个元素且服从标准正态分布的一维数组 numpy.sort(MyArray3)对数组元素排序,排序结果并不覆盖原数组内容
numpy.rint(MyArray3)对数组元素做四舍五入
numpy.sign(MyArray3)计算各元素正负号,1表示正号,-1表示负号 numpy.where(MyArray3>0,'正','负'),依次对数组元素做逻辑判读,where内是一个三元组 MyArray3+MyArray2,数组相同位置上的元素相加
import numpy as np
np.random.seed(123)
X = np.floor(np.random.normal(5,1,(2,5)))
Y = np.eye(5)
print('X:\n{0}'.format(X))
print('Y:\n{0}'.format(Y))
print('X和Y的点积:\n{0}'.format(np.dot(X,Y)))
执行结果
X:
[[3. 5. 5. 3. 4.]
[6. 2. 4. 6. 4.]]
Y:
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
X和Y的点积:
[[3. 5. 5. 3. 4.]
[6. 2. 4. 6. 4.]]
代码解释
numpy.random.normal(5,1,(2,5))生成元素服从均值为5标准差为1的2行5列的数组(矩阵) nunpy.floor() 得到距各数组元素最近的最大整数
numpy.eye(5) 生成一个5行5列的单位矩阵
numpy.dot(X,Y) 计算矩阵X和Y的矩阵乘积
from numpy.linalg import inv,svd,eig,det
X = np.random.randn(5,5)
print(X)
mat = X.T.dot(X)
print(mat)
print('矩阵mat的逆:\n {0}'.format(inv(mat)))
print('矩阵mat的行列式的值:\n{0}'.format(det(mat)))
print('矩阵mat的特征值和特征向量:\n{0}'.format(eig(mat)))
print('对矩阵mat做奇异值分解:\n{0}'.format(svd(mat)))
执行结果
[[-0.67888615 -0.09470897 1.49138963 -0.638902 -0.44398196]
[-0.43435128 2.20593008 2.18678609 1.0040539 0.3861864 ]
[ 0.73736858 1.49073203 -0.93583387 1.17582904 -1.25388067]
[-0.6377515 0.9071052 -1.4286807 -0.14006872 -0.8617549 ]
[-0.25561937 -2.79858911 -1.7715331 -0.69987723 0.92746243]]
[[ 1.6653281 0.3422329 -1.28839014 1.13288023 -0.47839144]
[ 0.3422329 15.75232012 6.94940128 5.8598402 -4.3525394 ]
[-1.28839014 6.94940128 13.06151953 1.58238781 0.94392314]
[ 1.13288023 5.8598402 1.58238781 3.30834132 -1.33134132]
[-0.47839144 -4.3525394 0.94392314 -1.33134132 3.52128471]]
矩阵mat的逆:
[[ 1.80352376 0.91697099 -0.13003481 -1.89987257 0.69500392]
[ 0.91697099 1.06125071 -0.33606314 -1.6733028 0.89378948]
[-0.13003481 -0.33606314 0.21904487 0.39759582 -0.34145532]
[-1.89987257 -1.6733028 0.39759582 3.24041446 -1.20785501]
[ 0.69500392 0.89378948 -0.34145532 -1.20785501 1.11805164]]
矩阵mat的行列式的值:
105.54721777632038
矩阵mat的特征值和特征向量:
(array([23.58279263, 10.10645658, 2.29462217, 0.16661658, 1.1583058 ]), array([[-0.00179276, -0.18946636, -0.59452701, -0.46660531, -0.62683045],
[ 0.77739059, -0.36419497, 0.09103298, -0.39431826, 0.31504284],
[ 0.54092005, 0.77338945, 0.00371263, 0.10167527, -0.31451966],
[ 0.27741393, -0.24680189, -0.58381349, 0.71576484, 0.09472503],
[-0.16157864, 0.41523742, -0.54534269, -0.32270021, 0.63240505]]))
对矩阵mat做奇异值分解:
(array([[-0.00179276, 0.18946636, 0.59452701, 0.62683045, 0.46660531],
[ 0.77739059, 0.36419497, -0.09103298, -0.31504284, 0.39431826],
[ 0.54092005, -0.77338945, -0.00371263, 0.31451966, -0.10167527],
[ 0.27741393, 0.24680189, 0.58381349, -0.09472503, -0.71576484],
[-0.16157864, -0.41523742, 0.54534269, -0.63240505, 0.32270021]]), array([23.58279263, 10.10645658, 2.29462217, 1.1583058 , 0.16661658]), array([[-0.00179276, 0.77739059, 0.54092005, 0.27741393, -0.16157864],
[ 0.18946636, 0.36419497, -0.77338945, 0.24680189, -0.41523742],
[ 0.59452701, -0.09103298, -0.00371263, 0.58381349, 0.54534269],
[ 0.62683045, -0.31504284, 0.31451966, -0.09472503, -0.63240505],
[ 0.46660531, 0.39431826, -0.10167527, -0.71576484, 0.32270021]]))
代码解释
X = numpy.random.randn(5,5)生成包含5行5列且服从标准正态分布的矩阵
X.T 指的是矩阵X的转置
mat = X.T.dot(X) X的转置与矩阵X相乘
inv(mat)矩阵mat的逆
det(mat)矩阵mat的行列式的值
eig(mat)矩阵mat的特征值和特征向量
svd(mat)对矩阵mat做奇异值分解