gpt4 book ai didi

python - 无法将Bessel函数的结果放入numpy的数组中

转载 作者:行者123 更新时间:2023-12-01 05:10:40 25 4
gpt4 key购买 nike

继这篇文章之后:

How to put complex into a numpy's array?

这对我来说似乎很有效。

但是为什么在这种情况下我会收到此错误?

  1 #!/usr/bin/env python
2 import scipy.special
3 import numpy as np
4
5 deg = 10
6 nodes = np.polynomial.legendre.leggauss(deg)[0]
7 A = np.zeros((deg, deg), dtype=complex)
8 for i in range(0, deg):
9 for j in range(0, deg):
10 A[i, j] = scipy.special.sph_yn(0, nodes[i]*nodes[j])[0]


machine:Desktop users$ ./aa.py
Traceback (most recent call last):
File "./aa.py", line 10, in <module>
A[i, j] = scipy.special.sph_yn(0, nodes[i]*nodes[j])[0]
TypeError: can't convert complex to float

附加:如果我注释第 10 行并在嵌套 for 循环中打印 scipy.special.sph_yn(0, nodes[i]*nodes[j])[0],我会从 sph_yn 得到什么

[-0.61456112]
[-0.79004531]
[-1.19235662]
[-2.16125343]
[-6.82467416]
[ 6.82467416+0.j]
[ 2.16125343+0.j]
[ 1.19235662+0.j]
[ 0.79004531+0.j]
[ 0.61456112+0.j]
... and so on

最佳答案

special.sph_yn(0,nodes[i]*nodes[j])[0]返回一个包含 1 个元素的 numpy 数组。您想要将此数组内的值分配给 A,而不是数组本身。要从数组中获取单个值,请使用 item() 方法:

A[i, j] = special.sph_yn(0, nodes[i]*nodes[j])[0].item()
<小时/>

请注意使用列表理解:

A = np.array([[special.sph_yn(0, nodes[i]*nodes[j])[0].item()
for j in range(deg)]
for i in range(deg) ])

也可以工作,并且(如果你有足够的内存)比一次给 NumPy 数组一个元素赋值要快。

关于python - 无法将Bessel函数的结果放入numpy的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com