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

Python生成具有随机步长的范围数组,python,numpy,random,range,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循环?您可以比代码更好地使用它 import random xa = [None] * 100 xa[0] = random.random() for i in x

目标:使用随机数初始化具有预定义大小的数组。 我已经尝试过这种方法,并且正在工作:

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

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

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

import random
xa = [None] * 100
xa[0] = random.random()
for i in xrange(1, 100):
        xa[i] = xa[i-1] + random.random()
您还可以使用以下功能:

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()
计算每个元素,就像您在问题中所写的那样。

简单的一行程序

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

使用列表理解:

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

同样如前所述,
np.empty(100)
已经为您提供了大小完全随机的数组。
np.empty()
有什么问题?

如果您使用的是numpy,那么问题中的代码相当于:

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

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

[0.37454012 1.32525443 2.05724837 2.65590685 2.81192549]
[ 62 157 208 303 306]
但是如果您想要返回一个范围(如函数中的范围),但使用随机步骤,您可以执行以下操作:

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

[0.37454012 1.32525443 2.05724837 2.65590685 2.81192549]
[ 62 157 208 303 306]
请注意,在这两种情况下,仅打印前5个数字。在这两种情况下,步骤都是积极的

进一步

  • 关于和的文件

  • 我觉得不错。当你创建
    np.empty(100)
    时,它已经是随机的了。。。?我不太明白你的问题。您是否只希望后续的每个元素都比前一个元素大?
    cumsum
    在一个随机的步骤数组中?它是一个由100个随机数组成的数组吗?或者它有任何特定的条件吗?要详细说明@hpaulj注释:
    xa=np.cumsum(np.random.rand(100))
    这是一个很好的答案。不要忘记将结果分配给
    xa
    ;)我相信random.random()返回介于0和1之间的浮点值。所以这不会返回与OP相同的结果。这是我得到的输出[86, 15, 91, 75, 65, 46, 81, 45, 94, 3, 61, 28, 96, 29, 5, 100, 62, 89, 20, 92, 32, 76, 55, 87, 84, 27, 6, 11, 80, 95, 90, 67, 9, 41, 59, 48, 54, 42, 79, 52, 24, 93, 1, 19, 18, 13, 50, 71, 49, 97, 12, 78, 25, 66, 47, 38, 40, 33, 68, 26, 53, 8, 16, 43, 21, 70, 72, 56, 7, 63, 37, 58, 51, 34, 14, 69, 64, 83, 73, 4, 85, 2, 77, 31, 30, 82, 35, 44, 98, 17,99,74,88,36,10,60,22,23,39,57]运算的输出不会返回整数很好的答案。很好。谢谢。谢谢你的答案,但不完全是我想要的。这只是返回一个随机数列表,而不是我要找的随机数的累积和。还值得一提的是np.empty(100)实际上不是随机的,而是垃圾(分配给数组的内存地址上的任何信息),我认为这是不同的。