【问题标题】:Select random non zero elements from each row of a 2d numpy array从 2d numpy 数组的每一行中选择随机非零元素
【发布时间】:2018-12-03 21:58:02
【问题描述】:

我有一个二维数组

a = array([[5, 0, 1, 0],
           [0, 1, 3, 5],
           [2, 3, 0, 0],
           [4, 0, 2, 4],
           [3, 2, 0, 3]])

和一维数组

b = array([1, 2, 1, 2, 2])

which (b) 告诉我们要从数组a 的每一行中选择多少个非零元素。

例如,b[0] = 1 告诉我们必须从 a[0] 中选择 1 个非零元素,b[1] = 2 告诉我们必须从 a[1] 中选择 2 个非零元素,依此类推。

对于一维数组,可以使用np.random.choice 来完成,但我找不到二维数组的方法,所以我必须使用for 循环,这会减慢计算速度。

我想要二维数组的结果

array([[5, 0, 0, 0],
       [0, 1, 0, 5],
       [2, 0, 0, 0],
       [0, 0, 2, 4],
       [3, 2, 0, 0]])

在这里,我们在第 1 行有 1 个元素,在第 2 行有 2 个元素,在第 3 行有 1 个元素,依此类推,如数组 b 中给出的。

【问题讨论】:

  • 如果b中的非零项目数与随机数不匹配怎么办?
  • @Kasramvd b 中的数字不是随机的,它是每行 a 中非零元素数量的 80% 的整数值。就像row 1 的非零元素数是280% of 21.6int(1.6)1

标签: python arrays python-3.x numpy


【解决方案1】:

这看起来像是一个竞争性编程问题。

我不认为你可以使用 numpy.random.choice 实现结果(我可能错了)。

不管怎样,这样想吧。要从大小为n 的一维数组中选择x 数量的非零元素,在最坏的情况下将具有 O(n) 复杂度。而且,对于 2D 数组,如果您遵循相同的幼稚方法,它将是 O(n^2)。

this 帖子几乎与您的问题相似,但 numpy.nonzero 也是 O(n^2) 函数。

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 2018-01-27
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多