python - 生成随机唯一的 3D 二进制矩阵
问题描述
我创建了一个包含一千个随机 10*10*10 二进制矩阵的列表。
P=[]
for idx in range (0,1000):
s=(10,10,10)
a=np.zeros(s)
for i in range (0,10):
for j in range (0,10):
for k in range (0,10):
c=np.random.random(1)
if c>0.5:
c=1
else:
c=0
a[i][j][k]=c
P.append(a)
之后,我尝试了以下操作以确保没有重复任何矩阵。但是,我得到了一个错误。
unique_set=[]
for idx in P:
if idx not in unique_set:
unique_set.append(idx)
unique_set
这是我得到的错误:
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
我应该尝试什么?
解决方案
您收到该错误的原因是因为在执行时需要在内部评估数组的真实性if idx not in unique_set
。
解决方案取决于您的意图。如果您认为如果两个数组的所有元素都相等,则它们相等,那么您可以这样做:
for idx in P:
if not any(np.array_equal(idx, other_idx) for other_idx in unique_set):
unique_set.append(idx)
这会将每个idx
与 中存在的所有先前idx
es进行比较unique_set
。逐元素比较在np.array_equals
.
除了你的错误,你真的应该考虑使用np.random.choice
来生成你的P
. 这将比for
纯 Python 中的循环快得多。
推荐阅读
- google-calendar-api - Google Calendar 支持的“calendarId”官方列表
- python - 如何使用python解析键值数据
- python - 将所有构造函数参数作为实例属性添加到 PyCharm 中的类
- reactjs - 对于 React 和 TypeScript,哪种方法是首选方法
- google-apps-script - 每当在谷歌表格中编辑另一个单元格时,是否可以使用简单的触发器来增加一个单元格?
- algorithm - 为什么深度优先搜索的空间复杂度不表示为 O(n)?
- c - 如何将结构传递给系统调用,然后将内核数据复制到该结构
- python - 使用 zappa 部署时如何使用自定义 lambda 名称而不是自动生成的名称?
- javascript - 如何将此 javascript 和 HTML 代码添加到 Angular 项目中?我可以从 javascript 函数中以角度呈现 html 吗?
- html - 为什么在打印时部分出现在屏幕上的不可见元素?