【问题标题】:How do I store "z" as a variable that contains more than a single value?如何将“z”存储为包含多个值的变量?
【发布时间】:2021-12-26 21:06:04
【问题描述】:

如何将 z 存储为具有多个值的变量,而不是在每次循环后重写 z 的代码?

import numpy as np

def equation1(m,k,x,deltat):

    Fpeak = 1000 + 9 * x**2 - 183 * x
    td = 20 - 0.12 * x**2 + 4.2 * x

    w = np.sqrt(k/m)
    T = 2 * np.pi / w
    time = np.arange(0,2*T,deltat)

z=[]
for t in time:
    if (t <= td):
        z = (Fpeak/k) * (1 - np.cos(w*t)) + (Fpeak/k*td) * ((np.sin(w*t)/w) - t)
    else:
        z = (Fpeak/(k*w*td)) * (np.sin(w*t) - np.sin(w*(t-td))) - ((Fpeak/k) * np.cos(w*t))
    
    return(z)

print(equation1(200,1000,0,0.001))

【问题讨论】:

  • 这完全取决于您希望 z 成为什么样的变量。
  • 一份清单?然后初始化z = [],在你的循环中,z.append(...)
  • 一个数组?然后对其进行初始化,并按索引分配。
  • ...但事实上,这个问题太宽泛了,无法回答,因为z 有几种不同的东西可能包含所有想要的结果,你需要选择一个自己。

标签: python function numpy for-loop if-statement


【解决方案1】:

如果您想在一个变量中存储多个值,请使用列表

z 在您的代码中被声明为一个列表,其中 z = []

您可以使用 append 方法简单地添加到列表中

z.append(value)

在您的代码中

z=[]
for t in time:
    if (t <= td):
        z.append(((Fpeak/k) * (1 - np.cos(w*t)) + (Fpeak/k*td) * ((np.sin(w*t)/w) - t)))
    else:
        z.append(((Fpeak/(k*w*td)) * (np.sin(w*t) - np.sin(w*(t-td))) - ((Fpeak/k) * np.cos(w*t)))

【讨论】:

    【解决方案2】:

    由于一切都是代数,因此很难理解您要做什么,但我认为您希望最终结果是对应于每个时间单位的 z 值列表?

    在这种情况下,将每个 'z = ...' 行替换为 'z.append(...)' 并取消缩进 return 语句,使其在函数范围内,而不是 for 循环。

    ...
    def a_more_descriptive_function_name(m,k,x,deltat):
      
      # ...
      
      for t in time:
          if (t <= td):
              z.append((Fpeak/k) * (1 - np.cos(w*t)) + (Fpeak/k*td) * ((np.sin(w*t)/w) - t))
          else:
              z.append((Fpeak/(k*w*td)) * (np.sin(w*t) - np.sin(w*(t-td))) - ((Fpeak/k) * np.cos(w*t)))
    
      return z
    

    【讨论】:

    • 非常感谢!我不记得如何实现“ .apppend() ”部分并且完全错过了缩进问题。我将函数“cantilever_deflection”重命名为更具体,但不会看到代码,只会看到结果。再次感谢您的帮助!
    • @Luna 没问题!相信我,即使只是为了你自己,给函数和变量起描述性的名字也是值得的。如果您使用自然语言而不是将其视为数学方程式,那么让您的想法保持井井有条会容易得多;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多