在Python中创建一个具有不同增量的数组

时间:2016-12-23 11:33:46

标签: python arrays numpy

在Python中我知道如何从某个值a开始创建一个数组,将每个组件递增一些m直到它达到某个值b:

array = numpy.arange(a, b, m)

然而,如果我想要改变怎么办?具体来说,我想要数组 1,2,... 9,10,20,... 90100200 ... 900,1000 ...

因此每十个组件增加10倍的增量。实现这一目标最简单的方法是什么?如果我必须,我可以使用循环,并手动'但有更好的方式吗?

3 个答案:

答案 0 :(得分:4)

你可以利用numpy的broadcasting来实现这一目标。你可以创建一个给你1-9的数组,然后将它与一个给你10的幂的数组相乘。然后,展平最终数组,为您提供所需的列表。

>>> a = np.arange(1,10)
>>> b = 10**np.arange(4)
>>> (b[:, np.newaxis] * a).flatten()

array([   1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   20,
     30,   40,   50,   60,   70,   80,   90,  100,  200,  300,  400,
    500,  600,  700,  800,  900, 1000, 2000, 3000, 4000, 5000, 6000,
   7000, 8000, 9000])

答案 1 :(得分:0)

它不容易阅读或漂亮,但这是一个单行:

reduce(lambda x, y: x+y, [range(10**n, 10*10**n, 10**n) for n in range(4)])

答案 2 :(得分:0)

我使用无限生成器:

def rudyard_steps(value=1, increment=1):
    while True:
        yield value
        value += increment
        if value % (10*increment) == 0:
            increment *= 10

现在要获得前500个左右,

from itertools import islice
print(list(islice(rudyard_steps(), 500)))