python - 如何创建一个随机条目的numpy数组,每个索引中排除一个元素?
问题描述
我有一个val
可能值的数组(例如val = [0, 1, 2, 3, 4, 5]
)和一个选定值的数组A
(可能很长的列表)(例如A = [2, 3, 1, 0, 2, 1, ... , 2, 3, 1, 0, 4]
)
现在我想创建一个B
长度相同的数组,A
它A[i]
不同于B[i]
每个数组,并且随机选择其中的i
条目。B
如何使用 numpy 有效地做到这一点?
解决方案
这有点浪费,因为它为每个项目创建了一个临时列表,A
但在其他方面满足了您的要求:
from random import choice
val = [0, 1, 2, 3, 4, 5]
A = [2, 3, 1, 0, 2, 1, 2, 3, 1, 0, 4]
val = set(val)
B = [choice(list(val - {x})) for x in A]
print(B) # -> [4, 2, 3, 2, 5, 4, 1, 5, 5, 4, 1]
简而言之:
发生的情况是将val
其转换为set
从中删除当前项目的a 。A
因此,从这个结果子集中随机选择一个项目并添加到B
.
您还可以使用以下方法对其进行测试:
print(all(x!=y for x, y in zip(A, B)))
当然返回True
最后,请注意,上述方法仅适用于可散列项。因此,如果您可能遇到类似val = [[1, 2], [2, 3], ..]
的问题,您会遇到问题。
推荐阅读
- java - Travis 使用 ant 代替 maven
- c - 坚持使用 pthreads 进行矩阵乘法
- java - 如何在 JSP 中编写这个 JSTL for 循环?无法找到明确的方法:class java.lang.Math.min(Long, Integer)
- javascript - 使用带有地图的 setTimeout 来避免 API 速率限制的问题
- java - 当 Jar 通过 Windows 10 链接启动时 setIconImage 不起作用
- sql - SQL Server 2012 - 按月、3 个月、6 个月、11 个月和上一年 11 个月分组
- google-cloud-platform - 为什么 Avro 文件在 BigQuery 中的大小更大
- javascript - 将 GoogleSheet 复制到另一张工作表时出现数组大小问题
- javascript - 在 input type=radio 检查时,添加一个类到 input=text
- python - AWS Lambda:调用调用 API 操作失败,并显示以下消息:网络错误