我在 python 中有以下代码:
import numpy as np
from scipy.io import savemat
states = np.array([[1,2,3,4,4,4,4,4],[5,6,7,8,8,8,8,8],[9,10,11,12,12,12,12,12],[2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2]])
states2_P = states.copy()
for j in range(2,np.shape(states2)[0]-2):
if (np.mod(j,2)==0):
# print(states.shape)
states2_P[j,:] = (states[j-1,:]*states[j-2,:]).copy()
savemat('states.mat',{"foo": states})
我正在尝试在 MATLAB 中编写相同的代码:
close all;
clear all;
clc;
states = double(cell2mat(struct2cell(load('states.mat'))));
states2_M = states(:,:);
for i=3:size(X_aug,1)-1
if mod(i,2)==0
states2_M(i,:) = states(i-1,:).*states(i-2,:);
end
end
我愿意 states2_M
匹配states2_P
。我的 MATLAB 代码中做错了什么?
在 MATLAB 中,索引从 1 开始,在 Python 中从 0 开始。你调整了所有地方的指数,但条件仍然
mod(i,2)==0
存在。在 Python 中,对于第一个数组元素以及之后的每个第二个元素都是如此。在 MATLAB 中,第二个数组元素以及此后的每个第二个元素都是如此。在 MATLAB 中,您需要
mod(i,2)==1
匹配 Python。实际上,您可以省略该
if
语句,并修改循环以增加两步:for i=3:2:size(X_aug,1)-1
。您的 Python 代码可以通过完全相同的方式进行调整。