【发布时间】: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的非零元素数是2,80% of 2是1.6,int(1.6)是1。
标签: python arrays python-3.x numpy