我正在尝试将Matlab代码转换为Python,大部分内容都很容易更改。但当一个地方出现很多冒号时,我被这个部分卡住了。这是原始的Matlab代码:
for iii=1:nP-1
nnn=100;
xxx=[X(iii):(X(iii+1)-X(iii))/nnn:X(iii+1)];
fff=0;
for j=1:2
[U,V]=Hermite(X(iii:iii+1),j,xxx);
fff=fff+U*Y(iii+j-1)+V*DY(iii+j-1);
end
figure(1), hold on, grid on, axis equal
plot(xxx,fff,'r-','LineWidth',2.5);
plot(X(iii:iii+1),Y(iii:iii+1),'ko','LineWidth',2,'MarkerSize',8)
end
我在Python中得到了它:
for iii in range(0,nP - 2):
nnn = 100
xxx = [X[iii]:(X[iii + 1] - X[iii]) / nnn:X[iii + 1]]
fff = 0
for j in range(0,1):
[U, V] = Hermite(X[iii:iii + 1], j, xxx)
fff = fff + U * Y(iii + j - 1) + V * DY[iii + j - 1]
plt.figure(1)
plt.grid("on")
plt.axis("equal")
plt.plot(xxx, fff, color='red',marker='o',linestyle='')
plt.plot(X[iii:iii + 1], Y[iii:iii + 1], color='blue',marker='o',linestyle='')
plt.show()
我被卡住的部分在这里:
xxx = [X[iii]:(X[iii + 1] - X[iii]) / nnn:X[iii + 1]]
我相信对于一个精通两种语言的人来说,这应该很容易。提前谢谢。
语法a : b : c
使用b的步骤创建了一个从a到c(如果可能的话,包括c(的序列。在这种情况下,将其进一步括在括号中没有效果,因为序列已经是一个矩阵(即a:b:c
等价于[a:b:c]
(。因此
[ X(iii) : (X(iii+1) - X(iii)) / nnn : X(iii+1) ];
是一个序列:
来自CCD_ 4的- (无论其评估为什么(
- 至
X[iii + 1]
- 使用
(X[iii + 1] - X[iii]) / nnn
的步骤
如果处理整数,python中的等价物是range( start, end, steps)
,如果处理浮点,则是numpy.arange
,但有一点需要注意。Matlab将endpound视为"包容性",而python将其视为"排他性"。这意味着你必须稍微调整你的端点以获得相同的范围(通常你可以通过将值"endpoint+step"传递给range
来实现这一点,使其成为python的新"排除"端点(
为了向您展示我的意思,请考虑以下示例:
在倍频程(/matlab(控制台中:
octave:1> a = 1; b = 2; c = 11;
octave:2> a:b:c
1 3 5 7 9 11
在python3解释器中:
>>> a = 1; b = 2; c = 11;
>>> list( range( a, c+b, b ) )
[1, 3, 5, 7, 9, 11]