首页 > 解决方案 > 生成随机唯一的 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()

我应该尝试什么?

标签: pythonarraysmatrixrandombinary

解决方案


您收到该错误的原因是因为在执行时需要在内部评估数组的真实性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与 中存在的所有先前idxes进行比较unique_set。逐元素比较在np.array_equals.

除了你的错误,你真的应该考虑使用np.random.choice来生成你的P. 这将比for纯 Python 中的循环快得多。


推荐阅读