numpy矩阵的维度和运算
2019-08-18 本文已影响0人
DancingBUG
上一篇是不是太简单,这篇一样很简单,愉快的开始吧~
当然还是导入numpy,并且来创建一个3行4列的矩阵
t1 = np.arange(12).reshape(3,4)
t1.size # 矩阵元素的数量
# 12
t1.dtype # 矩阵内元素的类型
# dtype('int64')
我们可以给矩阵内的元素类型做一下改变:
t1 = t1.astype(np.float64) # 给矩阵的元素做类型转换
'''
可以看到都变成浮点数啦
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
'''
t1.dtype
# dtype('float64')
# 还是变回去吧
t1 = t1.astype(np.int64)
t1
'''
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
'''
上一篇说了升维,现在说一下如何降维:
# 此处把t1从二维降到一维,不写参数的话,order默认='C',会按照行横着拼接
t2 = t1.flatten(order='C')
t2
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
# 再看看如果按order='F'就是按列竖着拼接
t2 = t1.flatten(order='F')
t2
# array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
两个相同的矩阵可以和矩阵做运算吗?比如让t1 * t1, 此时的t1是:
'''
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
'''
t2 = t1 * t1
t2
'''
array([[ 0, 1, 4, 9],
[ 16, 25, 36, 49],
[ 64, 81, 100, 121]])
'''
# 可以看出,两个矩阵自动按照行列相同的对应位置相乘了,神奇吧?
最后告诉大家,矩阵的运算共有4种。第一种是上篇提到的和单个数字做运算,第二种是刚才实现的shape相同的矩阵互相运算,第三种就是单列、行数相同,第四种是单行、列数相同,举例如下:
# 创建一个单行4列的矩阵
t2 = np.arange(4).reshape(1,4)
t2
# array([[0, 1, 2, 3]])
'''
此时的t1:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
'''
t1 + t2
# t2只有一行四列, 但和三行四列的t1相加后, 是t2的每行元素都和t1的元素对应相加了
'''
array([[ 0, 2, 4, 6],
[ 4, 6, 8, 10],
[ 8, 10, 12, 14]])
'''
# 最后来个3行单列的矩阵
t2 = np.arange(3).reshape(3,1)
'''
array([[0],
[1],
[2]])
'''
# 这次是t2分别和t1的每一列相乘
t1 * t2
'''
array([[ 0, 0, 0, 0],
[ 4, 5, 6, 7],
[16, 18, 20, 22]])
'''
# 相信大家看出来了吧?