Matlab中的函数方法

1 篇文章 0 订阅
1 篇文章 0 订阅

clear

在matlab中clear是清楚的意思

randperm

在matlab中表示为 randperm(n),返回的是从1-n的随机数列

例如randperm(5),返回的可能就是4,3,1,5,2

在python中对应的是torch.randperm

for循环

在matlab中存在两种for循环

1.for NUM=2

2.for i=1:NUM

第一种并不是真正意义上的for循环,其实只是对变量做一个赋值,让其在下面的循环体中生效

第二种才是真正的for循环,循环条件就是i=1-NUM

rand

在matlab中rand函数本意是产生由在(0, 1)之间均匀分布的随机数组成的数组

例如rand(a,b)就是生成一个a×b的数组,值为0-1之间的随机数

在python中对应的是random.random

random的参数设置为random.random(size=(a,b)),完成的工作同matlab中的rand函数相同

矩阵的行列

在matlab中输出矩阵的行列要用size函数,参数设置为size(a,k),其中a为要输出行列的矩阵,k=2代表输出列数,k=1代表输出行数

在python中则不需要使用size函数,使用a.shape[k]即可,k=0输出行数,k1输出列数

下角标的设置

在matlab中下角标的设置从1开始

在python中下角标的设置从0开始

当需要对比输出结果的时候需要注意下角标是从0还是1开始的

matlab中的()、[]、{}

其中() ,用于引用数组的元素, X(3)就是X的第三个元素。 X([1 2 3])就是X的头三个元素

[]是用来存储矩阵和向量的, a=[1,2,3] 就是存放一个矩阵a

{},用于cell型的数组(就是单元数组)的分配或引用

合成高维矩阵

例:在matlab中将二维矩阵合成三维矩阵

for i=1:NUM
                alpha=alpha;
                 Alpha{i}=alpha;

alpha是二维矩阵,Alpha是我们最终需要的三维矩阵,在for循环中依次按要求得到我们需要的二维矩阵alpha,只需要通过{}的方式就可以将二维矩阵依次合成三维矩阵。

在python中则需要

for i in range(0,NUM):    
    Alpha_test_1 = []    
    alpha = alpha
    for row in range(alpha.shape[0]):        
        Alpah_test = []        
        for col in range(alpha.shape[1]):            
            Alpah_test.append(alpha[row,col])        
            Alpha_test_1.append(Alpah_test)    
            Alpha.append(Alpha_test_1)
Alpha = np.array(Alpha)

其中主要思想就是将二维矩阵按行列拆开,依次写入三维矩阵

运算符号

^

matlab中幂次运算使用符号(注意.的区别,.对矩阵中的每一个元素都做平方处理)

在Python中使用**运算符号

*

在matlab中*代表矩阵乘法,前面加一个.代表矩阵对应位置相乘

在python中矩阵乘法使用dot()方法,矩阵对应位置相乘使用multiply()方法

/\

矩阵除法在 matlab 里定义为矩阵求逆后相乘。例如 A的逆矩阵是 A1,则 B/A = B×A1,A\B = A1×B

(截至目前只用到这些不同的运算符号,后续还会更新)

时间处理

在matlab中用 tic 和toc来保存程序的完成时间

在Python中大多数情况下使用datetime.datetime.now()记录当前时间,在程序开始和结束的位置均写下该语句记录下程序的开始和结束的时间。

0/1矩阵

在matlab中使用zeros或one函数,生成0或1矩阵

在Python中使用numpy.zeros或numpy.one函数,生成0或1矩阵

注意在matlab中zeros参数只需要一层()例如zeros(n,m)

在python中需要两层括号zeros((n,m))否则会出现错误。

k-means算法

在matlab中使用kmeans函数调用kmeans算法,基本参数为kmeans(a, b); 其中a为需要聚类的数据,b为需要聚类簇的数量,另外还有一些’emptyaction’,'singleton’避免非0矩阵的参数,具体参照官网文档即可。

在python中首先调用KMeans()函数,参数为KMeans(n_clusters=b),b为需要聚类簇的数量,接着使用.fit(a)方法对数据进行聚类,a为需要聚类的数据,通过.cluster_centers_方法返回聚类中心。具体例子如下。

kmeans = KMeans(n_clusters=b, random_state=0).fit(a)
center = kmeans.cluster_centers_

exp

matlab求解对数使用exp

python中使用np.exp

矩阵的复制

在matlab中想将矩阵A复制m*n块需要使用repmat(A, m, n) ,A为需要复制的矩阵,m,n为矩阵的维数

在Python中可以直接调用numpy中matlab中的repmat方法,参数和上面相同,也可以使用np.tile(A,(m,n))方法,其中需要注意,tile方法的底层逻辑给定的参数是两个,需要复制的矩阵,和矩阵的维度,如何不加m,n外面的括号程序会出错。

矩阵的切片

在matlab中对矩阵进行切片使用a(m,n)即可

在python中需要使用a[m,n]

如在python中对矩阵进行切片出现如下错误

TypeError: ‘(0, slice(None, None, None))’ is an invalid key

报错原因就是切片的数组是DataFrame对象,而不是数组,我们只需要将DataFrame对象X_df转成ndarray数组即可,在切片的矩阵后面加上values

例如我们想得到a[j,:],报错后修改为a.values[j,:]即可

matlab的特殊符号

~

[~,center] = kmeans(train_x, NumRule,‘emptyaction’,‘singleton’);

单引号在matlab中是矩阵的转置的意思

在Python中矩阵的转置需要使用numpy的T

在matlab中如上语句代表的是将kmenas的中心存到center的矩阵中,~没有实际意义

然后再逻辑运算中~则代表非的意思

输出语句

matlab的输出语句有如下几种

变量后面直接加;这种方法是直接输出数值

disp(a) 这种方法是直接在公屏打印a

fprintf(‘a=%f’,a) 这种事结构化输出语句,类似C的输出

python中的输出语句只需要print()即可

矩阵维度

在matlab中使用size函数返回矩阵的维度大小

在Python中使用shape方法

矩阵行内元素相乘

在matlab中计算一个矩阵一行或一列元素的相乘使用prod函数,参数为prod(A,K)A代表需要处理的矩阵,K=1按列计算,K=2按行计算。

在Python中可以调用matlab包进行计算,注意参数K变为0或1而不是1或2

也可以使用自己编写的函数

re= 1
for x in data:
    re= re x
    return re

归一化

在matlab中归一化使用mapminmax函数,参数为mapminmax(A’,M,N) 其中A为需要处理的矩阵,M,N为归一的范围

在python中需要使用preprocessing.MinMaxScaler()和fit_transform()方法具体例子如下

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
T1 = min_max_scaler.fit_transform(A)

其中feature_range为归一化的范围,A为需要处理的矩阵

python的矩阵维度

其中矩阵的维度(n,)和(1,n)是有区别的,有些时候需要从(n,)转换为(1,n),使用reshape()方法即可

给矩阵增加一行或一列

在matlab中使用[]即可,例有一列数据b,给a矩阵增加一列b可以写为data = [a,b]

在Python中可以使用column_stack()矩阵拼接的方法。例data = np.column_stack((a,b))

矩阵的最大值

matlab中求解矩阵的最大值使用max函数,首先max(A)返回矩阵A中每一个维度的最大值,接着max(max(A))再返回每一个维度最大值中的最大值,也就是矩阵的最大值

python中不能调用matlab中的max函数,需要使用numpy中的max函数

神经网络层传递函数

matlab中使用 tansig函数作为神经网络层传递函数,tansig(x)=2/(1+exp(-2*x))-1

eye

在matlab中eye生成单位矩阵

在python中使用np.eye

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值