【问题标题】:How to create an array from two 2d arrays, based in conditionals and random selection with PYTHON如何基于条件和使用 PYTHON 随机选择从两个二维数组创建数组
【发布时间】:2021-06-27 00:15:59
【问题描述】:

我正在尝试使用两个二维数组和条件来创建一个数组。用 numpy 随机创建的第一个数组是:

A = [[0 0 0 1 0 1 1 0 0 1 0],
     [0 0 1 1 1 1 1 1 0 1 1],
     [0 0 0 1 0 1 1 1 0 0 0],
     [1 1 0 1 0 0 0 1 1 1 0]]

(假设所有列都至少有“1”值)

第二个数组是:

B = ["a","b","c","d"]

我正在尝试创建一个数组,在每列中仅随机选择“1”值(包含“1”的行无关紧要)。当我找到“1”时,位置(在选定行中)必须链接到数组“B”,取“B”中的值,最后分配到数组“C”中。例如,评估列“0”,唯一可能的值是 A[0,3]=1,所以 B=["d"](唯一可能的值)并且该值必须是数组“C”的第一个值.列“3”可以取“B”中的任何值。

例如,我正在寻找的完整数组可能是以下一个:

C= ["d","d","b","a","b","c","a","d","d","a","b"]

我正在尝试使用以下代码创建“C”:

import numpy as np
A=np.random.randint(2, size=(4,11)) 
A=np.array(A)

C=[] 
var=0

B=["a1","b1","c2","d2"]

for i in range(11):
    C.append(var)
    R=np.random.randint(0,4)             
    if A[R,0+i]==1:
        var=B[R]        
    else:
        var=0
print(C)

结果如下:

[0, 0, 'a1', 'a1', 'd2', 0, 'd2', 'd2', 'd2', 0, 0]

此代码无法完成工作,我无法在几列中找到“1”。我一直在尝试不同的方法,包括:坐标、循环和生成器。但我找不到真正有效的。

如果您能帮助我,我将不胜感激。

谢谢。

【问题讨论】:

    标签: python loops multidimensional-array random generator


    【解决方案1】:

    我可能很难理解您的问题。这里的一个大问题是,不能保证A 的列内有任何 1。

    但是,假设您有一个特殊的 A 可以保证这一点,那么您的第二个问题是您的随机 R 从所有行中挑选;它只需要从那些有 1 的人中挑选。 您希望通过 2 个步骤来实现:

    1. 查找给定列的所有有效行
    2. 随机选择一个

    最后,在实际计算之前附加到C。这也意味着你必须在循环外定义一个var,这对你来说应该是一个很大的警告信号。

    总而言之:

    import numpy as np
    A=np.random.randint(2, size=(4,11))
    
    C=[] 
    B=["a1","b1","c2","d2"]
    
    for column in A.transpose():
        valid_rows = np.where(column == 1)[0]
        R = np.random.choice(valid_rows)
        C.append(B[R])
    
    print(C)
    

    【讨论】:

    • 非常感谢。你完全理解我的问题。 “A”是一个特殊的数组,基于概率,每一列将包含至少一个具有“1”值的行。我运行了代码并且效果很好,它又好又快,再次感谢您。最好的问候。
    • 很高兴听到。如果您认为应得的,请记住更新并接受正确的答案。
    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多