arrays - 随机整数元素可能具有不同范围的数组行
问题描述
考虑以下代码片段:
import numpy as np
mask = np.array([True, True, False, True, True, False])
val = np.array([9, 3])
arr = np.random.randint(1, 9, size = (5,len(mask)))
正如预期的那样,我们得到一个随机整数数组,从 1 到 9,有 5 行和 6 列,如下所示。该val
阵列尚未使用。
[[2, 7, 6, 9, 7, 5],
[7, 2, 9, 7, 8, 3],
[9, 1, 3, 5, 7, 3],
[5, 7, 4, 4, 5, 2],
[7, 7, 9, 6, 9, 8]]
现在我来介绍一下val = [9, 3]
。
在哪里mask = True
,我希望从 1 到9随机取行元素。
在哪里mask = False
,我希望从 1 到3随机抽取行元素。
如何有效地做到这一点?示例输出如下所示。
[[2, 7, 2, 9, 7, 1],
[7, 2, 1, 7, 8, 3],
[9, 1, 3, 5, 7, 3],
[5, 7, 1, 4, 5, 2],
[7, 7, 2, 6, 9, 1]]
解决方案
一种想法是在 0 到 1 之间随机采样,然后与9
或3
相乘mask
,最后1
相加以移动样本。
rand = np.random.rand(5,len(mask))
is3 = (1-mask).astype(int)
# out is random from 0-8 or 0-2 depending on `is3`
out = (rand*val[is3]).astype(int)
# move out by `1`:
out = (out + 1)
输出:
array([[4, 9, 3, 6, 2, 1],
[1, 8, 2, 7, 1, 3],
[8, 2, 1, 2, 3, 2],
[4, 3, 2, 2, 3, 2],
[5, 8, 1, 5, 6, 1]])
推荐阅读
- vba - VBA SeleniumBasic - 缺少一个可点击后不再工作
- css - 当 div 嵌套在溢出中时展开 div
- sql - 使用 SQL/OLE DB 将数据导入 Excel
- python - 通过移动浏览器访问 django 应用程序
- ansible - ansible --limit 选项继承
- scala - 无法理解 flatMap 如何消除 Nil 元素
- javascript - 打开多个模态
- clojure - Compojure-api:请求强制通过 multipart-params 提供的地图
- apache-kafka - WARN 由于要求失败,发现损坏的索引文件:发现损坏的索引,索引文件
- java - EqualsAndHashCode.Exclude 无法解析为类型