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