1. 定义ndarray和matrix

from numpy import *

a = mat([[1,2],[3,4]])
b = mat([[5,6],[7,8]])
c = array([1,2],[3,4])
d = array([5,6],[7,8])

看看输出他们会不会有什么区别

print(a)
print(c) >>[[1 2]
[3 4]]
[[1 2]
[3 4]]
#发现输出的matrix和array是一模一样的
print(type(a))
print(type(c)) >> <class 'numpy.matrix'>
<class 'numpy.ndarray'>

2. ndarray可以是任意维数,matrix只能是2维

A = array([[[1,2]]]) #正常不报错
B = mat([[[1,2]]]) #报错 >>ValueError: matrix must be 2-dimensional

3. 乘法

3.1 ndarray

3.1.1 叉乘

print(c)
print(d)
print(np.dot(c,d)) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[19 22]
[43 50]]
#可以看出ndarray也可以像矩阵一样进行叉乘,但需要满足矩阵叉乘的条件(第一个矩阵的列数等于第二个矩阵的行数)

3.1.2 普通乘法

print(c)
print(d)
print(c*d) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[ 5 12]
[21 32]]
#普通乘法是对应位置元素相乘

3.2 matrix

3.2.1 叉乘

print(a)
print(b)
print(np.dot(a,b)) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[19 22]
[43 50]]
#矩阵叉乘

3.2.2 普通乘法

print(a)
print(b)
print(a*b) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[19 22]
[43 50]]
#这里发现对于矩阵运算符"*"直接对应的是叉乘,和np.dot()效果相同
print(a)
print(b)
print(np.multiply(a,b)) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[ 5 12]
[21 32]]
#如果非要对矩阵进行普通乘法,可以通过np.multiply()实现

那么ndarray和matrix能否混合做乘法呢,结果是点乘还是叉乘呢?

print(a)
print(b)
print(a*d) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[19 22]
[43 50]]
#可以对matrix和ndarray进行混合乘法,这里的运算符"*"是叉乘

当然啦也可以通过np.multiply()对matrix和ndarray进行点乘

print(a)
print(b)
print(np.multiply(a,d)) >>[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[ 5 12]
[21 32]]

4. ndarray和matrix互相转换

4.1 matrix → ndarray

使用matrix对象的A属性或者np.asarray()方法

e = a.A
f = np.asarray(a)
print(type(e))
print(e)
print(type(f))
print(f) >><class 'numpy.ndarray'>
[[1 2]
[3 4]]
<class 'numpy.ndarray'>
[[1 2]
[3 4]]
#这两种方法都可以将matrix转化为ndarray

但是需要注意注意通过转化得到的ndarray(在这里是e和f)和原始matrix(这里是a)共享内存空间,修改了a之后e和f的值也会被修改

a[1,1] = 2
print(e)
print(f) >>[[1 2]
[3 2]]
[[1 2]
[3 2]]
#在修改了a中元素的值后e,f的值都随之改变

当然了,在改变e或f的值后,a的值也会随之改变

e[1,1] = 3
print(a) >>[[1 2]
[3 3]]

4.2 ndarray → matrix

使用np.asmatrix()方法

e = np.asmatrix(c)
print(e) >>[[1 2]
[3 4]]

同样的,通过转化得到的matrix和原始ndarray共享内存空间

5. ndarray和matrix的其他区别

5.1 matrix更多的操作方法

matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix objects 还可以在后面加 .H f得到共轭矩阵, 加 .I 得到逆矩阵。

5.2 **运算符

** 运算符的作用也不一样 :因为a是个matrix,所以a**2返回的是a*a,相当于矩阵相乘。而c是array,c**2相当于,c中的元素逐个求平方

5.3 matrix维数总保持2维

ndarray与matrix的最大的不同是,在做归约运算时,ndarray的维数会发生变化,但matrix总是保持为2维。例如下面求对行求平均值的运算

print("matrix")
print(a)
print(a.mean(1))
print("ndarray")
print(c)
print(c.mean(1)) >>matrix
[[1 2]
[3 4]]
[[1.5]
[3.5]]
ndarray
[[1 2]
[3 4]]
[1.5 3.5]

参考:https://blog.csdn.net/lylclz/article/details/79843437

python中ndarray和matrix的更多相关文章

  1. Python中ndarray数组切片问题a[-n -x:-y]

    先看看如下代码: >>a=np.arange(10)>>a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>a[-7:] array( ...

  2. Python中Numpy ndarray的使用

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...

  3. Python中数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

  4. python中的矩阵、多维数组----numpy

    https://docs.scipy.org/doc/numpy-dev/user/quickstart.html  (numpy官网一些教程) numpy教程:数组创建 python中的矩阵.多维数 ...

  5. python小白之矩阵matrix笔记(updating)

    Matrix #python学习之矩阵matrix 2018.4.18 # -*- coding: UTF-8 -*- from numpy import * import numpy as np i ...

  6. 结合scipy.linalg在Python中使用线性系统

    摘要:将线性代数概念应用到实际问题中scipy.linalg 使用 Python 和 NumPy处理向量和矩阵 使用线性系统模拟实际问题 使用求解线性系统 scipy.linalg 本文分享自华为云社 ...

  7. Python中利用LSTM模型进行时间序列预测分析

    时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...

  8. Python中NumPy基础使用

    Python发展至今,已经有越来越多的人使用python进行科学技术,NumPY是python中的一款高性能科学计算和数据分析的基础包. ndarray ndarray(以下简称数组)是numpy的数 ...

  9. python中的矩阵运算

    摘自:http://m.blog.csdn.net/blog/taxueguilai1992/46581861 python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入nu ...

随机推荐

  1. JuJu团队11月30号工作汇报

    JuJu团队11月30号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达  提供类似generator的数据产生接口  改进代码  对julia不够熟悉 婷婷  和队友一起 ...

  2. Golang的变量定义及使用案例

    Golang的变量定义及使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.变量的定义 package main import "fmt" func m ...

  3. 说说我当初是如何学Linux的

    今天我就说说我当初是如何从一名普通桌面维护工程师,通过学习和努力转成Linux运维工程师的,以及作为Linux运维工程师需要一些什么技能和知识,希望可以帮到一些对Linux有兴趣或者想往Linux这个 ...

  4. pip制作离线安装包

    有的电脑无法连接外网(金融行业你懂的),上网下载包又下载不到 anaconda安装一个包(联网情况下)很简单 pip install python-docx 如何把python-docx做成离线包安装 ...

  5. Win10下用selenium、Image.crop() 截图时、坐标不准确的问题

    截百度按钮的图 先将整个窗口的图保存下来 from selenium import webdriver driver = webdriver.Chrome() driver.get('https:// ...

  6. 【转】ASP.NET Core WebAPI JWT Bearer 认证失败返回自定义数据 Json

    应用场景:当前我们给微信小程序提供服务接口,接口中使用了权限认证这一块,当我使用 JWT Bearer 进行接口权限认证的时候,返回的结果不是我们客户端想要的,其它我们想要给客户端返回统一的数据结构, ...

  7. 第二阶段scrum-10

    1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 等待发布

  8. javaBean命名属性时的小注意点

    javabean属性命名的时,第一个和第二个字母最好不要是大写字母,不然使用eclipse自动生成getter和setter方法时,会出现奇怪的问题,导致struts2封装属性的封装不上. priva ...

  9. 学习spring的第4天

    关于老式的spring+mybatis整合,使用了druid连接池,还使用了mybatis-spring依赖(用于整合的),但是这个依赖本身就使用了spring-jdbc的某些类来处理事务方面的内容, ...

  10. CGridCtrl显示子控件 及事件

    m_Grid.SetCellType(row, , RUNTIME_CLASS(CGridCell)); m_Grid.SetItemText(row, , _T(")); m_Grid.S ...