在Python中我知道如何从某个值a开始创建一个数组,将每个组件递增一些m直到它达到某个值b:
array = numpy.arange(a, b, m)
然而,如果我想要改变怎么办?具体来说,我想要数组 1,2,... 9,10,20,... 90100200 ... 900,1000 ...
因此每十个组件增加10倍的增量。实现这一目标最简单的方法是什么?如果我必须,我可以使用循环,并手动'但有更好的方式吗?
答案 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)))