2016-06-18 104 views
2

我想生成一个数组,其中包含由for循环生成的所有元素。我没有在NumPy手册或计算器中找到任何相关或有用的东西。这是代码中有问题的部分。将由for循环生成的元素附加到数组中

import numpy as np 

for i in range(0,26): 
    d = np.random.uniform(i,i+1.75) 
    empty = np.array([]) 
    all = np.append(empty, d) 
    print all 

我曾经尝试都追加和串联,二者只是打印25列,但只存储all最后一个。

任何帮助将不胜感激。

回答

1

@摩西的回答工作正常,但你可以直接在numpy中实现。 np.random.uniform也需要一个尺寸参数。 See documentation。因此,您的代码可以简化为:

all = np.random.uniform(0, 1.75, size=(26,)) 
all += np.arange(26) 

这里的窍门是要认识到np.random.uniform(0, 1.75) + 1相同np.random.uniform(1, 2.75)

第二行是考虑到在循环的索引。其结果将是:

array([ 0.82259558, 1.07737171, 3.56331306, 3.44506941, 
     5.36435903, 6.43062515, 7.4293016 , 8.62581585, 
     9.64664137, 10.11875821, 10.04800508, 12.03356491, 
     13.16818327, 14.12761814, 15.09009053, 15.96770449, 
     17.0981378 , 17.47152708, 18.15557107, 20.13834956, 
     21.22972932, 22.15797838, 22.97552168, 23.09385798, 
     24.17160732, 25.07440533]) 

这种解决方案可能是一个有点难以绕到你的头,但是当你想要做的更复杂的计算,这是一个非常强大的模式。如果你不明白,请告诉我。而且,@摩西的解决方案也是正确的!

1

all应置于外循环,这样就可以避免覆盖先前写入值和值应被更新,而不是重新分配给新追加与empty

import numpy as np 

all = np.array([]) 
for i in range(0,26): 
    d = np.random.uniform(i,i+1.75) 
    all = np.append(all, d) 
    print all 
+0

@nikjohn你还应该把'print all'放在循环之外 –

相关问题