Python生成具有随机步长的范围数组

时间:2018-11-13 17:49:48

标签: python numpy random range

目标:初始化具有随机数的预定义大小的数组。 我已经尝试过这种方式并工作:

xa = np.empty(100)
xa[0] = random.random()
for i in range(1,100):
    xa[i] = xa[i-1] + random.random()

我的问题:还有更好的方法吗?也许没有for循环?

5 个答案:

答案 0 :(得分:1)

您还可以使用itertools.accumulate函数:

from itertools import accumulate
import numpy as np
import random

xa = np.empty(100)
xa[0] = random.random()

xa = list(accumulate(xa, lambda x, y: x + random.random()))

我不确定这是否是您所需要的,但是它像您在问题中所写的那样,使用prev + random.random()计算每个元素。

答案 1 :(得分:1)

单线简单

import random 
xa = random.sample(range(1, 101), 100)

答案 2 :(得分:1)

鉴于您使用的是numpy,问题中的代码等效于:

java.lang.RuntimeException: Can't start redis server. Check logs for details.
    at redis.embedded.AbstractRedisInstance.awaitRedisServerReady(AbstractRedisInstance.java:61)
    at redis.embedded.AbstractRedisInstance.start(AbstractRedisInstance.java:39)
    at redis.embedded.RedisServer.start(RedisServer.java:9)
    at com.example.test.config.EmbeddedRedisServer.before(EmbeddedRedisServer.java:38)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

输出

import numpy as np
np.random.seed(42)

xa = np.cumsum(np.random.random(100))
print(xa[:5])

但是,如果您想要的是某个返回范围的东西(例如range函数中的那个),但又需要一个随机步骤,则可以执行以下操作:

[0.37454012 1.32525443 2.05724837 2.65590685 2.81192549]

输出

xa = np.cumsum(np.random.randint(100, size=(100,)))
print(xa[:5])

请注意,在两种情况下,仅打印前5个数字。同样在这两种情况下,步骤都是肯定的。

进一步

  1. 关于cumsumrandintrandom的文档。

答案 3 :(得分:0)

您可以比代码更好地使用它

import random
xa = [None] * 100
xa[0] = random.random()
for i in xrange(1, 100):
        xa[i] = xa[i-1] + random.random()

答案 4 :(得分:0)

使用列表理解:

import random
n = 100   # your array size
xa = [random.random() for _ in range(n)]

再次提到,np.empty(100)已经为您提供了一个完全随机的大小数组。 np.empty()有什么问题?