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]])
'''
# 相信大家看出来了吧?
上一篇下一篇

猜你喜欢

热点阅读