Python 机器学习——线性代数和矩阵运算 从matlab迁移到python

本文对比了 Python 和 MATLAB 在矩阵运算上的差异,包括编程理念、索引、切片、特殊矩阵创建、矩阵运算等方面,并详细介绍了如何从 MATLAB 迁移到 Python,特别提到了 numpy 库的使用。同时,文章讨论了 numpy 中的 matrix 与 array 的区别,建议使用 array 类型以避免类型转换的困扰。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       
 

诚然,没有一门语言能够撼动matlab的矩阵或科学计算在学术圈的地位,因其简洁的语法(matrix是其基本数据类型),因其矩阵运算的便捷,因其术业有专攻(matlab:为科学计算而生),因其名字matlab:matrix laboratory,所在的公司名mathworks:math works。我在写过一些matlab和python的代码之后,油然发过一句感慨“没有一门语言能比matlab还更具数学感”。然而,因为numpypandasmatplotlib 等一众优秀的开发者(不排除从matlab阵营溜出来的)贡献的一众优秀的开源的库,让python具备了和matlab一样的功能,为工程而生的python从此因为有了数学家的参与就相当初的matlab一样,也学术起来,工程学术通吃。

本文试图回答的问题包括:

  • 为什么矩阵运算要从matlab迁移到python?
  • 如何进行迁移,其中会涉及哪些基本编程理念的差异?
  • 迁移的过程中需要注意哪些细节?

 

python矩阵运算,更准确地说,是numpy矩阵运算,为了更为方便地使用numpy库,如下文使用的那样,我们需要导入numpy库并重命名为np

import numpy as np
  
  
  
  • 1

零、编程理念的对比

0.1 编程范式

matlab是面向过程的编程方式,而python既支持面向过程又支持面向对象,是一种多范式(multi paradigms)的编程语言。因此,不难理解python编程语言中广泛存在的以下的两种等价实现方式:

np.dot(X, w)    # 调用全局函数,面向过程的编程方式X.dot(w)        # 调用对象的成员函数,面向对象的编程方式
  
  
  
  • 1
  • 2

0.2 matlab从1开始计数,python从0开始

0.2.1 对矩阵而言:

r = size(A, 1);         % 表示的是行数c = size(A, 2);         % 表示的是列数i = 0:size(A, 1) - 1;A(i, :)             % error: 矩阵的下标索引必须是正整数类型(>=1)或逻辑类型(true/false)
  
  
  
  • 1
  • 2
  • 3
  • 4

0.2.2 对python而言:

A.shape[0]      # 行数, axis = 0A.shape[1]      # 列数,   axis = 1# 等价的(或者叫面向过程的)表达方式np.shape(A)[0]np.shape(A)[1]# 可从0开始索引矩阵的行r = A.shape[0]A[0:r, :]
  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

0.3 matlab矩阵索引用的是小括号,python是中括号

小括号对于一种支持面向对象、支持运算符重载的语言来说,具有特别的意义,重载括号运算符是仿函数实现的命门。如果了解c++的运算符重载机制,一个类如果重载了括号运算符,便可称作仿函数,把一个类当做函数来使用。恰好,python也支持运算符重载。

class Prob(object):    def __init__(self, lhs):        self.lhs = lhs    def __call__(self, rhs):        return self.lhs * rhs    # def __call__(self, lhs, rhs)    #   return lhs * rhsif __name__ == '__main__':    p = Prob(2)     # 调用的是类构造函数,也即__
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值