如何将全一数组与随机数相乘
我想把我数组里的每个1都乘上一个随机数。每次我用循环的方法去做的时候,都会出现一个错误,提示说:'IndexError: index out of bounds.'
这是我的代码:
from physics import *
N = 3.0
x = ones(N)
for i in x:
x[i] = i * uniform(10)
Numpy这个库是从物理模块里导入的。
我这样做是为了方便,以后我想改变数组里1的数量时,只需要改一下N
的值就可以了。
3 个回答
0
因为你已经把长度存储在一个变量里了,所以只需要这样做:
N = 10
x = numpy.ones(N)
x *= numpy.random.uniform(10, size=N)
0
在for循环
中,i
的值总是1。如果想把i
当作x
的索引,就应该用range(len(x))
来替代,这样可以生成一个从0到N-1的数字列表,像这样[0, 1, ... N-1]
。
from physics import *
N = 3.0
x = ones(N)
for i in range(len(x)):
x[i]=i*uniform(10)
另外,你也可以这样写:
import numpy as np
x = np.random.uniform(0, 10, N) * np.arnage(N)
这里0
是下限,10
是上限,N
是大小。
0
除非你必须使用 physics
库,否则可以用这段代码:
>>> import random
>>> array = [1]*random.randint(1, 10)
>>> array
[1, 1, 1, 1, 1]
>>> for i, j in enumerate(array):
... array[i] = j*random.randint(1, 10)
...
>>> array
[3, 7, 5, 1, 2]
>>>
你的代码之所以不工作,是因为你用了 for i in x
,这会把 i
赋值为 x
中的每一个值。你应该把 for i in x
改成 for i in range(0, len(x))
或者 for i in range(len(x))
。