【问题标题】:For Loop error?For循环错误?
【发布时间】:2016-08-15 02:11:22
【问题描述】:

我是 Python 新手,但我正在努力学习。我正在尝试在 Python 中重新创建 Matlab for 循环。 Matlab for 循环如下所示:

for i = 2:(L-1)
    Acceleration_RMT5_x(i-1) = (RMT5(i+1,1)-2*RMT5(i,1)+RMT5(i
    1,1))/(1/FrameRate)^2;
end

数据类型是 float64,是一个 288x1 的向量。到目前为止,我的 Python 是:

for i in RMT5x:

  Acceleration_RMT5x = RMT5x[i+1] -2*RMT5x[i] +RMT5x[i-1]/(1/250)^2)

这给了我“无效的语法”。

我需要解决什么问题才能解决此错误?

【问题讨论】:

  • power 在 Python 中是 **^ 是异或。
  • 括号不匹配。数一数:一个打开的( 和两个关闭的)
  • 不是你的问题,如果你使用 numpy,购买这个循环可以向量化:Acceleration_RMT5x = RMT5x[2:] -2*RMT5x[1:-1] +RMT5x[:-2]/(1/250)**2。不需要循环。

标签: python matlab for-loop


【解决方案1】:

要在 Python 中提升某些功能,您需要 ** 而不是 ^

此外,您正在循环遍历 RMT5x,但您正尝试使用值 (i) 作为索引。相反,您想遍历索引。

Acceleration_RMT5x = list()

for i in range(1, len(RMT5x)-1):
    Acceleration_RMT5x.append(RMT5x[i+1] -2*RMT5x[i] +RMT5x[i-1]/(1./250)**2)

【讨论】:

  • 您仍然有 OP 的括号错误,并且您的循环将失败,因为 i+1 将尝试读取不存在的索引。 (我也不相信 OP 不想修改现有的 ndarray,但这很难确定。)
  • 这种情况最好使用enumerate(RMT5x)
  • @TheBlackCat 除了不是因为用户需要访问RMT5x 的上一个和下一个条目。使用enumerate 不允许这样做。
【解决方案2】:

我会使用列表推导:

import numpy as np
Acceleration_RMT5x = [np.power( (RMT5(i+1,1)-2*RMT5(i,1)+RMT5(i-1,1))/(1/FrameRate), 2)]

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2018-05-08
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多