当转换为Python时,冒号在Matlab中是什么意思



我正在尝试将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]

相关内容

  • 没有找到相关文章