我在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。