Python科学计算库NumPy

1、NumPy是什么

机器学习中常用到一个科学计算库叫NumPy:

NumPy就是一个矩阵数组。是一个多维数组对象,称为ndarray。

如:

import numpy
a = numpy.array([[1,2,3,4],
                 [5,6,7,8],
                [1,3,5,7]])
print(a)
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)
需要注意的是:同一个NumPy数组中所有的元素必须是相同的。

2、NumPy属性介绍

NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2。每一个线性的数组称为是一个轴(axes),秩即为轴的数量。上文提到的那个ndarray就是二维数组,秩为2。
numpy中常用的对象属性:
1、ndarray.ndim:数组的维数,等于秩;
2、ndarray.shape:数组的维度,为一个标识数组在每个维度上大小的整数元组,上述ndarray的shape打印就是(3, 4);同时这个元组的长度就是数组的维数,即ndim;
3、ndarray.size:数组元素的总个数,等于shape中元素的乘积,上述ndarray的size就是12;
4、ndarray.dtype:数组中元素类型;
5、ndarray.itemsize:数组中每个元素的字节大小,上述ndarray元素是int64类型,int64占用64个bits,每个字节长度为8,所以占用64/8等于8个字节。

3、numpy的使用

1、创建一个元素为0--14,(3,5)维度的矩阵

vector = numpy.arange(15)
print(vector)
vector2 = vector.reshape(3,5) # 向量转换成矩阵
print(vector2)

# 输出的结果为
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

2、指定一个矩阵,元素都为0

vector3 = numpy.zeros((3,4))
print(vector3)

# 输出的结果为
[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]

3、

a = numpy.array([[1,2,3,4],
                 [5,6,7,8],
                [1,3,5,7]])
print(a)
print(a[:,1])

# 输出的结果为
[[1 2 3 4]
 [5 6 7 8]
 [1 3 5 7]]
[2 6 3] #这个结果意思是取任意行中第1列的元素

4、

print(numpy.arange(10,30,5))

# 输出的结果为
[10 15 20 25]

# 如果需要知道这个方法的意义,可以打印help函数查询,如:
print(help(numpy.arange))
5、
# vector3 = numpy.ones((2,3,4),dtype=numpy.int32)
# vector3 = numpy.random.random((2,3)) # 利用random模块随机取数构造2行3列的数组
vector3 = numpy.linspace(0, 9, 10) # linspace从0到9平均取10个数构造数组,包含0和9
print(vector3)

6、ndarray的计算

# ndarray的计算
a = numpy.array([20,30,40,50])
b = numpy.arange(4)
print(a-b)
print(a-1)

# 输出结果是:
[20 29 38 47]
[19 29 39 49]

7、矩阵的*运算和.dot运算

a = numpy.array([[1,2],
                 [2,3]])

b = numpy.array([[1,3],
                 [2,4]])

# print(a*b)
print(a.dot(b))
# print(numpy.dot(a,b))
8、矩阵幂运算和根号运算

a = numpy.arange(3)
print(a)
print(numpy.exp(a))
print(numpy.square(a))

#输出结果是
[0 1 2]
[ 1.          2.71828183  7.3890561 ]
[0 1 4]

9、numpy.floor(a)和numpy.random.random((3,4))

a = 10*numpy.random.random((3,4))
print(a)
a = numpy.floor(a)
print(a)
print(a.revel()) # 矩阵转向量
a.shape = (6,2)
print(a.T) # 矩阵的转置

# 输出结果:
[[ 5.40834281  4.269162    7.92982643  4.279437  ]
 [ 7.89479131  4.06550228  1.76543625  1.47728591]
 [ 9.26177306  8.97762938  6.38632298  6.02355195]]

[[ 5.  4.  7.  4.]
 [ 7.  4.  1.  1.]
 [ 9.  8.  6.  6.]]

[ 6.  6.  9.  3.  0.  9.  2.  2.  7.  7.  0.  6.]

[[ 6.  4.  9.  5.  2.  7.]
 [ 5.  1.  0.  8.  6.  1.]]

10、矩阵拼接

a = numpy.floor(10*numpy.random.random((2,2)))
b = numpy.floor(10*numpy.random.random((2,2)))
print(a)
print(b)
print(numpy.hstack((a,b))) #横着拼
# print(numpy.vstack((a,b))) #竖着拼

# 输出结果:
[[ 6.  3.]
 [ 8.  4.]]
[[ 6.  8.]
 [ 2.  2.]]
[[ 6.  3.  6.  8.]
 [ 8.  4.  2.  2.]]

11、矩阵的裁剪

a = numpy.floor(10*numpy.random.random((4,6)))
print(a)
print(numpy.hsplit(a,3))
print(numpy.vsplit(a,2))

# 输出的结果
[[ 9.  6.  3.  3.  5.  3.]
 [ 3.  4.  4.  7.  8.  7.]
 [ 9.  9.  0.  1.  0.  1.]
 [ 3.  1.  9.  1.  5.  6.]]
[array([[ 9.,  6.],
       [ 3.,  4.],
       [ 9.,  9.],
       [ 3.,  1.]]), array([[ 3.,  3.],
       [ 4.,  7.],
       [ 0.,  1.],
       [ 9.,  1.]]), array([[ 5.,  3.],
       [ 8.,  7.],
       [ 0.,  1.],
       [ 5.,  6.]])]
[array([[ 9.,  6.,  3.,  3.,  5.,  3.],
       [ 3.,  4.,  4.,  7.,  8.,  7.]]), array([[ 9.,  9.,  0.,  1.,  0.,  1.],
       [ 3.,  1.,  9.,  1.,  5.,  6.]])]

12、矩阵的复制操作

定义一个ndarray对象a,

如果b = a,则a与b所指向的地址一样,a与b的值相同,b的值改变a的值也会改变;

如果c = a.view(),则a与b所指向的地址不一样,a与c的值相同,c的值改变,a的值也会改变;

如果d = a.copy(),则a与d所指向的地址不一样,a与d的值也无关联,d的值改变,a的值不改变。

13、找矩阵中每列最大元素所在的行,并拿到最大值:

a = numpy.sin(numpy.arange(20).reshape(5,4))
print(a)
maxIndex = a.argmax(axis = 0)
print(maxIndex)
maxData = a[maxIndex, range(a.shape[1])]
print(maxData)

# 输出的结果是:
[[ 0.          0.84147098  0.90929743  0.14112001]
 [-0.7568025  -0.95892427 -0.2794155   0.6569866 ]
 [ 0.98935825  0.41211849 -0.54402111 -0.99999021]
 [-0.53657292  0.42016704  0.99060736  0.65028784]
 [-0.28790332 -0.96139749 -0.75098725  0.14987721]]
[2 0 3 1]
[ 0.98935825  0.84147098  0.99060736  0.6569866 ]






猜你喜欢

转载自blog.csdn.net/u012236875/article/details/73499430