【问题标题】:How to multiply array of ones by random numbers如何将一个数组乘以随机数
【发布时间】:2014-05-30 14:17:35
【问题描述】:

我正在尝试将我的数组中的每个值乘以一个随机数。每次我尝试使用迭代方法时,都会收到一条错误消息:“IndexError: index out of bounds。” 这是我的代码:

from physics import *
N = 3.0
x = ones(N)

for i in x:
    x[i] = i * uniform(10)

Numpy 存储在物理导入中。

我已经这样做了,这样当我回来时,我可以通过更改 N 的值来轻松更改数组中的数量。

【问题讨论】:

    标签: python arrays random


    【解决方案1】:

    除非您必须使用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))

    【讨论】:

    • 我的目标是基本上生成一个包含 N 个术语的数组,每个术语都有一个随机数。当我使用 len(x) 函数时,它会将我的数组恢复到正常范围。我想避免使用 random 直接生成这个数组,因为我对生成的随机数的控制较少
    【解决方案2】:

    for-loop 中的i 始终为1。要将i 视为x 的索引,应将其替换为生成[0, 1, ... N-1]range(len(x))

    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 为大小。

    【讨论】:

    • 当我将它更改为 range(len(x)) 时,它会使我的原始数组变成 array(0, 1, 2) 而我仍然希望它保持原样。
    【解决方案3】:

    既然你已经有了一个变量的长度,它只是

    N = 10    
    x = numpy.ones(N)
    x *= numpy.random.uniform(10, size=N)
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 2013-07-17
      • 2023-03-26
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      相关资源
      最近更新 更多