我尝试用两个二维数组和条件创建一个数组。用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”。我尝试了不同的方法,包括:坐标循环和生成器但我找不到一个真正有用的。
1条答案
按热度按时间wljmcqd81#
我可能很难理解你的问题,这里的一个大问题是不能保证
A
的列中有 * 任何 * 1。但是,假设您有一个特殊的A,其中这是有保证的,那么您的第二个问题是您的随机
R
从所有行中进行挑选;它只需要从那些1中选择。您需要通过2个步骤来实现这一点:1.查找给定列的所有有效行
1.从这些中随机选择一个
最后,在实际计算之前要追加到
C
,这也意味着必须在循环外定义一个var
,这对您来说应该是一个很大的警告。总而言之: