1. 概述
python中的numpy包下有array(obj)和mat(obj)这两个方法,一个是将对象转为数组,一个是将对象转为矩阵,那么矩阵和数据到底有什么区别呢!
2. 数组和矩阵
- Numpy 中矩阵(matrix)必须是 2 维的,但是 numpy 中数组 (ndarrays) 可以是多维的(1D,2D,3D····ND);matrix 相当于是 ndarrays 的一个特例,包含于ndarrays,所以matrix 拥有ndarrays的所有特性。
- 在 numpy 中matrix的主要优势是:相对简单的乘法运算符号;例如,a和b是两个matrix,那么 a*b,就是矩阵乘积,a和b必须满足相乘的要求才能进行。
- matrix 和 ndarrays 都可以通过objects后面加 .T (或 .transpose())得到其转置。但是 matrix objects 还可以在后面加 .H 得到共轭矩阵, 加 .I 得到逆矩阵,数组就不可以。
- 相反的是在 numpy 里面 ndarrays 遵从逐个元素的运算,所以array:c 和d的c*d运算相当于matlab里面的c.*d运算;如果想要得类似矩阵相乘的结果,则需要 numpy里面的 dot 命令 。
3. 演示
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2019/1/21 10:41
# @Author : Arrow and Bullet
# @FileName: array_mat.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/qq_41800366
from numpy import *
A = array([1, 2, 3]) # 数组
B = array([1, 2, 3]) # 数组
print(A*B) # 结果 [1 4 9] 数组相乘
print(dot(A, B)) # 结果 14 结果是数值
A = mat([1, 2, 3]) # 矩阵
B = mat([1, 2, 3]) # 矩阵
print(A*B.T) # 结果 [[14]] 结果是矩阵
C = array([[1, 2], [3, 4]])
D = array([[1, 2], [3, 4]])
print(C*D) # 结果 [[ 1 4] [ 9 16]] 各个元素相乘
print(dot(C, D)) # 结果 [[ 7 10][15 22]] 类似矩阵相乘
E = array([[[1, 1], [2, 2]], [[3, 4], [5, 6]]])
print(E) # 结果 [[[1 1][2 2]][[3 4][5 6]]]
E = mat([[[1, 1], [2, 2]], [[3, 4], [5, 6]]])
# 报错 ValueError: matrix must be 2-dimensional
希望能够帮助到大家,有什么问题可以 直接评论即可,喜欢有用的话可以点个赞让更多的人看到,如果不够详细的话也可以说,我会及时回复的。