【问题标题】:Returning and empty array返回和空数组
【发布时间】:2023-03-27 06:57:01
【问题描述】:

我有一个方程式,我想为数组中的每个元素 (e0) 执行称为“能量”的方程式。然而,每次计算都需要循环定义范围内的一组值 (i)。当我尝试将一个循环放入另一个循环时,它返回一个空数组,而我想要一个与能量数组大小相同的数组。

fp1 = []
for e0 in energy:
    for i in range(elow, ehigh, stepsize):
        fp1 = np.append(fp1, np.cumsum((2 / np.pi) * ((mu(element, e0) * i / ((e0 * e0)-)(i * i)))) * 2)

这一切都相对较新,所以假设我完全忽略了一些东西。 为此使用 Python 2.7。

干杯

【问题讨论】:

  • elow、ehigh、stepsize 的值是多少?这只会在 elow >= eghigh 时生成 [] 列表。
  • 你能确认你在这里使用 Numpy 吗?因为 append 为 numpy 数组返回一个数组,而为 Python 列表返回 None。
  • 你确定你的代码,因为它甚至不为我运行。特别是: ((e0 * e0)-) 似乎是一个语法错误。
  • fp1 = np.append()?是什么让您认为 list.append() 返回一个值?
  • 请明确定义“返回一个空数组”是什么意思?没有return,这不是函数定义。

标签: python arrays loops


【解决方案1】:

不应该出现空列表的情况。但是,如果您在评论中所说的是真的,那么您应该期待什么。例如:

 elow = 2
 ehigh = 900
 stepsize = 2
 fp1 = []
 energy = [1, 2, 3]
 for e0 in energy:
     for i in range(elow, ehigh, stepsize):
          fp1 = numpy.append(fp1, 15)

 fp1
 array([ 15.,  15.,  15., ...,  15.,  15.,  15.])
 len(fp1)
 1347

如您所见,您不会得到相同长度的能量数组。这是因为range(2, 900, 2) 生成了一个从 2 -> 898(449 个元素)开始的列表。这是针对能量中的每个元素生成的,并且您的计算结果将附加到 fp1,因此您应该得到 449 * 3 = 1347 个元素作为结果。

除了:

elow >= ehigh

energy = []

stepsize < 0

因此,我的建议是在循环之前对所有这些值进行打印/调试,并尝试更好地解释您想要实现的目标,因为就像我说的那样,即使这可行,您也不会得到与energy 长度相同但与length = len(energy) * 449 长度相同的输出

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2017-07-12
    • 1970-01-01
    • 2021-11-16
    • 2016-01-13
    • 1970-01-01
    • 2021-08-11
    • 2017-02-27
    • 2020-04-01
    相关资源
    最近更新 更多