目标:初始化具有随机数的预定义大小的数组。 我已经尝试过这种方式并工作:
xa = np.empty(100)
xa[0] = random.random()
for i in range(1,100):
xa[i] = xa[i-1] + random.random()
我的问题:还有更好的方法吗?也许没有for循环?
答案 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个数字。同样在这两种情况下,步骤都是肯定的。
进一步
答案 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()
有什么问题?