我已经尝试了前两个解决方案here和底层解决方案,因为它处理了numpy但没有任何效果。
我想把80.0分成我的数组名称的每个元素一个新的数组dx。
import numpy
L = 80.0
N = []
for n in range(-4, 10):
N.append(str(2 ** N))
N = np.array([N])
这是设置。所以我试过的是:
dx = L / N
dx = map(lambda x: L / x, N)
dx = np.array([dx])
最后,将N保持为列表并将N保持为numpy数组并执行
dx = [x / N for x in N]
dx = np.array([dx])
不幸的是,我无法在文档中找到帮助或任何内容的帖子。我该怎么做才能达到预期的效果?
答案 0 :(得分:4)
您的代码包含多个错误,并且您有很多不必要的强制转换,但是:为什么不直接尝试使用numpy?
这样的事情:
import numpy as np
L = 80.0
N = 2 ** np.arange(-4, 10, dtype=np.float64)
dx = L / N
为您提供预期结果
array([ 1.28000000e+03, 6.40000000e+02, 3.20000000e+02,
1.60000000e+02, 8.00000000e+01, 4.00000000e+01,
2.00000000e+01, 1.00000000e+01, 5.00000000e+00,
2.50000000e+00, 1.25000000e+00, 6.25000000e-01,
3.12500000e-01, 1.56250000e-01])
顺便说一下。使用点时,您还可以隐式强制dtype
为float
:
N = 2 ** np.arange(-4., 10.)
答案 1 :(得分:2)
您可以使用列表推导在一行中完成。
In [8]: N=[80.0/(2**n) for n in range(-4,10)]
In [10]: print N
[1280.0, 640.0, 320.0, 160.0, 80.0, 40.0, 20.0, 10.0, 5.0, 2.5, 1.25, 0.625, 0.3125, 0.15625]
您可以避免将Numpy用于此类任务。
for循环等效于(不预先分配N):
In [11]: N=[]
In [12]: for n in range(-4,10):
....: N.append(80.0/(2**n))
....:
In [13]: print N
[1280.0, 640.0, 320.0, 160.0, 80.0, 40.0, 20.0, 10.0, 5.0, 2.5, 1.25, 0.625, 0.3125, 0.15625]