如何使用PYTHON基于条件和随机选择从两个二维数组创建数组

dhxwm5r4  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(156)

我尝试用两个二维数组和条件创建一个数组。用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”。我尝试了不同的方法,包括:坐标循环和生成器但我找不到一个真正有用的。

wljmcqd8

wljmcqd81#

我可能很难理解你的问题,这里的一个大问题是不能保证A的列中有 * 任何 * 1。
但是,假设您有一个特殊的A,其中这是有保证的,那么您的第二个问题是您的随机R从所有行中进行挑选;它只需要从那些1中选择。您需要通过2个步骤来实现这一点:
1.查找给定列的所有有效行
1.从这些中随机选择一个
最后,在实际计算之前要追加到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)

相关问题