项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

学生时代玩矩阵最爽的工具自然是matlab了。而且matlab天生就是为科学计算,为矩阵而生。matlab的一切对象皆可看成矩阵,最简单的一个整数,也是个1*1的矩阵。但是在公司里面以后,matlab就玩不转了。道理很简单,matlab虽然好用,但是正版软件非常贵。而且,matlab是闭源,跟现在开源的潮流也有些不大符合。。。
那在公司里面,怎么玩科学计算,怎么玩矩阵呢。其实很简单,涉及到数据处理的活,用python嘛。具体到矩阵计算,有大名鼎鼎的numpy模块。在python中,numpy是科学计算的基石,其他的高阶模块,如scipy,sklearn都建立在numpy的基础上。博主玩numpy的时间也不短了,抽空把numpy的一些基本用法给稍微总结一下,供有需要的同学参考。。

numpy大体上与matlab的使用方式很像。如果玩过matlab的同学们看numpy,那简直就是一样一样的。如果让我说numpy跟matlab的最大不同,那就是numpy的组织方式是以数组或多维数组为单位(当然numpy里也有矩阵),而matlab里的一切都是矩阵。。。

啥也不说先,先上代码,给大家一个大概的印象

1.最简单的构造矩阵的方法

import numpy as npdef array_test():print "The version is:", np.version.version,"\n"a = np.array([1,2,3])print "a is:",aprint "type(a) is:",type(a),"\n"b = np.array([[1,2],[3,4]])print "b is:"print bprint "type(b) is:",type(b),"\n"c = np.array([1,2,3],dtype = float)print "c is:",carray_test()

代码运行结果:

The version is: 1.8.0 a is: [1 2 3]
type(a) is: <type 'numpy.ndarray'> b is:
[[1 2][3 4]]
type(b) is: <type 'numpy.ndarray'> c is: [ 1.  2.  3.]

我的numpy版本是1.8.0。a是一个一维数组,b是一个二维数组,而c,则用dtype参数指定了数据类型为float。

再尝试用其他的方式生成数组对象

2.用其他方法构造矩阵

def other_pro_method():print np.linspace(1,2,11)printprint np.arange(15).reshape(5,3)array_test()

代码运行结果

[ 1.   1.1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  2. ][[ 0  1  2][ 3  4  5][ 6  7  8][ 9 10 11][12 13 14]]

怎么样同学们,是不是好熟悉的样子,是不是跟matlab里很像
再来几个特殊矩阵

3.构造特殊矩阵

def special_matrix():a = np.zeros((2,2))print "type a is:",type(a)print a,"\n"b = np.ones((2,2))print "type b is:",type(b)print b,"\n"c = np.eye(2,dtype=int)print "type c is:",type(c)print c,"\n"special_matrix()

运行结果如下:

type a is: <type 'numpy.ndarray'>
[[ 0.  0.][ 0.  0.]] type b is: <type 'numpy.ndarray'>
[[ 1.  1.][ 1.  1.]] type c is: <type 'numpy.ndarray'>
[[1 0][0 1]] 

如果我没有记错的话,matlab里也有这几个方法构造特殊矩阵。顾名思义,zeros(m,n)构造的是全0矩阵,ones(m,n)构造的是全1矩阵,而eys(n)构造的是单位阵。。。

4.矩阵求行列式,求逆,求特征值与特征向量

代码如下

import numpy as npdef get_some_trait():mat = np.array([[1,2],[3,4]])det = np.linalg.det(mat)print "the det of mat is:",det,"\n"inv_mat = np.linalg.inv(mat)print "the inv_mat is:"print inv_mat,"\n"eig1,eig2 = np.linalg.eig(mat)print "the eig of mat is:",eig1,"\n"print "the feature vector of mat is:"print eig2get_some_trait()

运行结果如下

the det of mat is: -2.0 the inv_mat is:
[[-2.   1. ][ 1.5 -0.5]] the eig of mat is: [-0.37228132  5.37228132] the feature vector of mat is:
[[-0.82456484 -0.41597356][ 0.56576746 -0.90937671]]

需要注意的是,eig方法返回的是一个元祖,包含有特征值与特征向量。所以童鞋们在使用的时候稍微注意即可。

python numpy模块玩转矩阵与科学计算相关推荐

  1. python求向量函数的雅可比矩阵_在python Numpy中求向量和矩阵的范数实例

    np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=np.linalg.norm(x, ord=None, ...

  2. python二维元素向量_详解python Numpy中求向量和矩阵的范数

    在python Numpy中求向量和矩阵的范数实例 np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=n ...

  3. numpy randn 和_人生苦短,自学python——numpy模块

      numpy.pandas.matplotlib.sklearn是python机器学习领域,最核心的几个模块,玩转了这几个模块也就玩转了机器学习,其中,numpy又是这几个模块中最基础的模块. 内置 ...

  4. Python~NumPy模块一站式教程,稳稳拿捏(持续更新ing)

    一.Numpy模块 基础 1. 介绍 NumPy的核心是多维数组类numpy.ndarray,矩阵类numpy.matrix是多位数组类的派生类.以多位数组类为数据组织结构,Numpy提供了众多的数学 ...

  5. python numpy 数据类型为python对象-python numPy模块 与numpy里的数据类型、数据类型对象dtype...

    学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 简介: numPy是python语言的一个扩展库,是一个运行非常快的数学库,主要用于数组计算. ...

  6. python numpy模块

    目录 numpy模块 一维数组 二维数组(用的最多的) 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的元素的替换 通过函数方法创建多维数组 矩阵的运算 点乘和转置(了解) 点乘必须 m*n ...

  7. 【Python numpy模块】结合金融场景演示numpy模块的操作

    ##基本操作 输入数组,对数组进行切片和索引 ##本篇文章所有操作展示均在spyder命令行窗口 股票简称 2018年9月3日 2018年9月4日 2018年9月5日 2018年9月6日 2018年9 ...

  8. python三维数据转换成二维_Python科学计算全生态工具锦集

    没关注?  伸出手指点这里 AI Python目前是与科学计算结合最好的一门编程语言,包括大数据分析.机器学习.人工智能.可视化,甚至是天文学.生物学(神经科学).量子力学等等都有强大的工具包支持 P ...

  9. python正弦波和等腰三角波_Python科学计算——任意波形拟合

    任意波形的生成 (geneartion of arbitrary waveform) 在商业,军事等领域都有着重要的应用,诸如空间光通信 (free-space optics communicatio ...

  10. 【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵

    首先,使用下面的代码,创建3个2×2的矩阵A.B.C. import numpy as np A = [[1, 2], [3, 4]] B = [[5, 6], [7, 8]] C = [[9, 9] ...

最新文章

  1. 当RabbitMQ使用Publish发布消息出现数据格式问题的解决方法
  2. std::setprecision、std::ios::fixed使用说明
  3. console 程序随系统启动及隐藏当前程序窗口
  4. jzxx1000~1010题分析
  5. GraphX中Pregel单源点最短路径(转)
  6. Java HashMap 默认排序
  7. 超能竞速大开眼界,iQOO 5系列正式发布
  8. Excel如何批量根据身份证号码查询出地址
  9. 什么是飞秒激光技术?
  10. C语言用函数max求两个数的最大值
  11. leetcode-排列组合问题
  12. 领导人要读的10本管理学书籍
  13. Java快速入门笔记-02 Java基础(基本数据类型、变量和常量、运算符、数组、字符串)
  14. 怎么逼自己 成为一个上进的人
  15. javascript技巧收集(200多个)
  16. 麒麟985和麒麟990有什么区别(手机常见问题)
  17. 如何理解 0.1+0.2
  18. MATLAB 动态曲线 视频
  19. ESP8266通过DHT11测量温湿度在串口监视器显示
  20. 【WLAN】【测试】WLAN相关测试软件一览

热门文章

  1. valgrind 报告 ecpg内存泄露 (二)
  2. 动态修改php的配置项
  3. OSChina 周日乱弹 —— 感到孤单了怎么办?
  4. Android应用程序消息处理机制(Looper、Handler)分析(3)
  5. ocp007 题库解析(1-15)
  6. kafka如何确定分区数
  7. matlab GUI 设计
  8. 034 Maven中的dependencyManagement和dependencies区别
  9. 发布一个 host 管理插件
  10. 关于浏览器存储问题理解