【问题标题】:Python - Initialise randomly set of different length vectorsPython - 随机初始化一组不同长度的向量
【发布时间】:2017-09-07 03:32:56
【问题描述】:

我正在尝试随机初始化一个向量列表(或一维数组)。向量并不总是具有相同的长度。

我重现了我的问题的一个小例子:

import numpy

l_vec = [5, 6, 4]
n_vec = len(l_vec)
w = numpy.array((n_vec,)).astype(object)

for i in range(len(l_vec)):
    w[i] = numpy.random.rand(l_vec[i])
    print i, w[i]

如果你运行它,你会看到w[0],没有问题:

0 [ 0.10584519  0.90833169  0.94235319  0.34320398  0.71796362]

但是,我有下一个错误(当i=1):

IndexError: index 1 is out of bounds for axis 0 with size 1 

如何更正我的代码以便能够随机初始化我的一组(不同长度)向量?

如果您能告诉我这段代码有什么问题,我也将不胜感激。

【问题讨论】:

  • 因为 w 的长度为 1。顺便说一句,如果您打算使用 object 样式,您不妨使用普通列表而不是 numpy 数组。
  • 再看看docstring for numpy.array。第一个参数不是数组的大小。
  • w = numpy.zeros(n_vec, dtype=object) 是制作大小为 (n_vec,) 的对象 dtype 数组的正确方法。
  • ... 或 numpy.empty(n_nvec, dtype=object) 如果您要稍后填写所有值。
  • np.empty with object dtype 将所有值初始化为None。我无法想象它可以节省任何时间。

标签: python arrays numpy random


【解决方案1】:

w=np.array(...) 替换为w=np.empty(...)

import numpy

l_vec = [5, 6, 4]
n_vec = len(l_vec)
w = numpy.empty((n_vec,)).astype(object)

for i in range(len(l_vec)):
    w[i] = numpy.random.rand(l_vec[i])
    print(i, w[i])

查看np.arraynp.empty 的文档。

【讨论】:

  • 非常感谢。我会看看文档,因为我从未见过np.empty()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2011-02-21
  • 1970-01-01
相关资源
最近更新 更多