专栏首页python3Python3-array和matrix

Python3-array和matrix

Preface

在相关聚类算法的实现过程中,用python语言实现,会经常出现array和matrix的混淆,这里做个总结。

array数组

numpy中最基本(默认)的类型是array,他的相关操作都是按元素操作的即用作数值计算当中(按元素操作有+,-,,/,*等)。相乘举例:

    from numpy  import *
    >>> a=array([1,2])
    >>> a
    array([1, 2])
    >>> b=array([2,3])
    >>> b
    array([2, 3])
    >>> c=a*b
    >>> c
    array([2, 6])
    >>> dot(a,b)
    8

两个array的相乘*指的是对应元素的相乘;两个array的dot表示矩阵的相乘。

  • 若a是array,则a.T表示转置。
  • 把array转换为matrix用asmatrix()
  • 多数numpy函数返回的是array类型,不是matrix类型。

matrix矩阵

在numpy中的特殊类型,是作为array的子类出现,所以继承了array的所有特性并且有自己的特殊的地方,专门用来处理线性代数操作(*表示矩阵的相乘,但是对于两个matrix的除/则表示对应元素的相除。)。乘法举例如:

    >>> m=mat([2,3])
    >>> m
    matrix([[2, 3]])
    >>> n=([1,2])
    >>> n
    [1, 2]
    >>> p=m*n

 Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 341, i
    n __mul__
        return N.dot(self, asmatrix(other))
    ValueError: objects are not aligned
    >>> dot(m,n)
    matrix([[8]])
    >>> multiply(m,n)
    matrix([[2,6]])
**  两个matrix相乘*错误原因是m的列不等于n的行,也即不对齐(aligned),若对齐了,则是对应元素的相乘,返回一个matrix;两个matrix的*表示是两个矩阵的相乘。两个matrix的dot表示矩阵相乘。两个matrix的multiply表示对应元素的相乘。**

 - matrix中.H,.A,.I表示共轭,转置,逆矩阵。
 - 把matrix转换为array用asarray()
 - asanyarray()根据和你的输入的类型保持一致。


## array和matrix的一个很难理解的点 ##
 这里会涉及到rank的概念,在线性代数(math)rank表示秩,但是必须明确的是在numpy里rank不是表示秩的概念,是表示维数的概念,这个理解的话需要看此文章:对于多维arrays的数据结构解释:
[多维arrays数据结构理解][1]

这里暂时理解为秩,虽然这样理解是错误的,但是可以说的通一些事情。(在实际的array和matrix里,英文里介绍的关于rank就用线性代数的秩来理解,但是英文会出现dimensions等于多少等,要求matrix的dimesions必须为2,这里其实指的就是秩,dimensions才是在numpy里的真实的理解形式)

array要求秩为1(N*1,1*N等)或者大于2
matrix要求秩必须为2(rank必须为2)

 - 下面是关于ndim和size的理解:
 >>> a
    array([1, 2])
    >>> b
    array([[1, 2],
           [2, 3]])
    >>> c
    matrix([[1, 2, 3, 4],
            [2, 3, 4, 5]])
    >>> d
    array([[1, 2, 3, 4],
           [2, 3, 4, 5]])
    >>> e
    matrix([[1, 2, 3, 4],
            [2, 3, 4, 5],
            [3, 4, 5, 6]])
    >>> a.size
    2
    >>> a.ndim
    1
    >>> b.size
    4
    >>> b.ndim
    2
    >>> c.size
    8
    >>> c.ndim
    2
    >>> d.size
    8
    >>> d.ndim
    2
    >>> e.ndim
    2
    >>>e.size
    12
**这里ndim就是求的是rank,所以会发现matrix的都是2,但是array的就会存在差异,需要计算等。size返回的是元素的个数**

 - 关于dim, shape, rank, dimension and axis in numpy的细节的问题理解:

[stackoverflow地址][2]



## 补充 ##
如何让

M = matrix([123, [4]])  如何转变为  array([1, 2, 3, 4])

比较优雅的办法:
x=matrix(arange(12).reshape((3,4))) 
x 
matrix([[ 0, 1, 2, 3], 
[ 4, 5, 6, 7], 
[ 8, 9, 10, 11]]) 
x.getA1() 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 
“`

总结

在运用中,还是用array好点,array的唯一缺陷就是在表示矩阵的相乘时候,要用dot,而不是*。

关于numpy里的array和matrix的其余的操作函数,另见wiki地址:http://wiki.scipy.org/NumPy_for_Matlab_Users

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 实现生命游戏

    这次我们使用 Python 来实现生命游戏,这是一种简单的元胞自动机。基于一定规则,程序可以自动从当前状态推演到下一状态。制作的成品如下:

    用户2870857
  • OpenCV系列之直方图-2:直方图均衡 | 二十七

    考虑这样一个图像,它的像素值仅局限于某个特定的值范围。例如,较亮的图像将把所有像素限制在高值上。但是一幅好的图像会有来自图像所有区域的像素。因此,您需要将这个直...

    磐创AI
  • Python数据分析之pandas基本数据结构

    Python数据分析之numpy数组全解析 Python数据分析之Pandas读写外部数据文件

    统计学家
  • TensorFlow2.0(1):基本数据结构——张量

    TensorFlow2.0版本已经发布,虽然不是正式版,但预览版都发布了,正式版还会远吗?相比于1.X,2.0版的TensorFlow修改的不是一点半点,这些修...

    统计学家
  • scipy 小结

    abserr:float:估测的绝对误差(An estimate of absolute error in the result)

    用户2870857
  • 厉害了!Python+matplotlib制作8个排序算法的动画

    深刻研究排序算法是入门算法较为好的一种方法,现在还记得4年前手动实现常见8种排序算法,通过随机生成一些数据,逐个校验代码实现的排序过程是否与预期的一致,越做越有...

    double
  • Python数据分析与挖掘的常用工具

    提供真正的数组,相比Python内置列表来说速度更快,NumPy也是Scipy、Matplotlib、Pandas等库的依赖库,内置函数处理数据速度是C语言级别...

    1480
  • OpenCV系列之傅里叶变换 | 三十

    傅立叶变换用于分析各种滤波器的频率特性。对于图像,使用2D离散傅里叶变换(DFT)查找频域。一种称为快速傅立叶变换(FFT)的快速算法用于DFT的计算。关于这些...

    磐创AI
  • Python数据分析之numpy数组全解析

    numpy是一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于大型、多维数据上执行数值计算。

    统计学家
  • python 实现 2048 游戏 (一)

    初学 python ,大家恐怕都想找到一条终南捷径,会产生譬如 3 天精通 python 这样不太切合实际的想法。这种想法是危险的,一旦你发现你根本不可能做到...

    用户2870857

扫码关注云+社区

领取腾讯云代金券