从2d numpy数组的每一行中选择随机非零元素

时间:2018-06-25 10:40:57

标签: python arrays python-3.x numpy

我有一个二维数组

RAW

和一维数组

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]) )告诉我们我们要从数组b的每一行中选择多少个非零元素。

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

对于一维数组,可以使用b[1] = 2完成,但是我找不到二维数组的处理方法,因此必须使用a[1]循环来减慢计算速度

我希望将结果作为2d数组作为

np.random.choice

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

1 个答案:

答案 0 :(得分:0)

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

我认为您不能使用numpy.random.choice获得结果(我可能是错误的)。

无论如何,请这样想。要从大小为x的一维数组中选择n个非零元素,在最坏的情况下它将具有O(n)的复杂度。而且,对于2D数组,如果您采用相同的幼稚方法,则将为O(n ^ 2)。

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