python:将数字除以numpy数组

时间:2013-09-25 12:21:27

标签: python arrays numpy

我已经尝试了前两个解决方案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])

这是设置。所以我试过的是:

  1. dx = L / N
  2. dx = map(lambda x: L / x, N)
    dx = np.array([dx])
    
  3. 最后,将N保持为列表并将N保持为numpy数组并执行

    dx = [x / N for x in N]
    dx = np.array([dx])
    
  4. 不幸的是,我无法在文档中找到帮助或任何内容的帖子。我该怎么做才能达到预期的效果?

2 个答案:

答案 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])

顺便说一下。使用点时,您还可以隐式强制dtypefloat

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]