【问题标题】:How do I add a row to an array using a for loop in python?如何在 python 中使用 for 循环向数组中添加一行?
【发布时间】:2020-08-26 22:49:00
【问题描述】:

我有这个方程会产生一个长度为 3000 的数组:

dRcs_Stokes=((112*((math.pi)**4))/15)*(((gj)*planck*c*B0*((nu0+i_dnu_Stokes)**4)*gammaSquared)/(((2*I+1)**2)*kb*T))*(i_Xj_Stokes*(math.exp(((-i_Erot)/(kb*T)))))

但是,对于我的 for 循环中的每次迭代,我想将新计算的值的长度为 3000 的新行添加到我的数组中。因此,当 for 循环结束时,我应该得到一个 30X3000 数组。我将如何在 python 中执行此操作?我不断收到“只有长度为 1 的数组可以转换为 Python 标量”错误。这是我的尝试:

dnu_Stokes=np.array([])
Erot= np.array([])
Xj_Stokes=np.array([])
dRcs_Stokes=np.array([])
anti_dnu_Stokes=np.array([])
anti_Xj_Stokes=np.array([])
anti_dRcs_Stokes=np.array([])

for i in range(1,30):
    i_dRcs_Stokes[i-1,:]=((112*((math.pi)**4))/15)*(((gj)*planck*c*B0*((nu0+i_dnu_Stokes)**4)*gammaSquared)/(((2*I+1)**2)*kb*T))*(i_Xj_Stokes*(math.exp(((-i_Erot)/(kb*T)))))

【问题讨论】:

标签: python arrays list numpy


【解决方案1】:

您可以使用 np.append 和 np.stack 在 numpy 中执行循环,但不要这样做。使用列表来构造/追加并在循环之外,将列表转换为数组:

i_dRcs_Stokes = []
for i in range(1,30):
    i_dRcs_Stokes.append(((112*((math.pi)**4))/15)*(((gj)*planck*c*B0*((nu0+i_dnu_Stokes)**4)*gammaSquared)/(((2*I+1)**2)*kb*T))*(i_Xj_Stokes*(math.exp(((-i_Erot)/(kb*T))))))
i_dRcs_Stokes = np.array(i_dRcs_Stokes)

另外,range(1,30) 将创建一个[1,2,..,29] 的序列,并且您的数组将具有(29,3000) 的形状。在上面的代码中使用 range(30) 来实现形状(30,3000)。

【讨论】:

  • 我仍然收到错误“只有长度为 1 的数组可以转换为 Python 标量”。
  • docs_Stokes 生成一个值数组而不是单个值。
  • @Jake 请发布完整的错误堆栈,以便我们提供更好的帮助。
  • 发生异常:TypeError 只有长度为 1 的数组可以转换为 Python 标量文件“/Users/justinjohnson/Documents/JAVA/makeLines.py”,第 36 行,在 makeLines i_dRcs_Stokes.append(( (112*((math.pi)**4))/15)*(((gj)*planckcB0*((nu0+i_dnu_Stokes)**4)*gammaSquared)/( ((2*I+1)**2)*kbT))*(i_Xj_Stokes*(math.exp(((-i_Erot)/(kbT)))))) 文件" /Users/justinjohnson/Documents/JAVA/makeLines.py",第 38 行,在 makeLines()
  • @Jake 这意味着在您的计算中,您传递的是数组而不是标量。您需要向我们提供可重现的示例或在公式之前打印出循环中的变量。问题不在于附加,而在于您的方程式。
猜你喜欢
  • 2020-04-04
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2020-03-20
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多