我要完成的工作是使列表在随机点处拆分,然后将另一个列表的第二部分加入其中。附带的代码将以随机生成的元素(由0和1组成,但包含10个元素)开始列表。然后,接下来的10个元素是长度为5的随机0和1。当我尝试将它们拆分时,会出现以下错误:ValueError:所有输入数组的维数必须相同
我希望得到的例子是:
p1 = [1,2,3,4,5,6,7,8,9,10][1,1,1,0,0][0,0,0,1,1]
p2 =[11,12,13,14,15,16,17,18,19,20][0,1,1,0,0][0,1,0,1,0]
k1= [1,2,3,4,5,6,7,8,9,10],[1,1,1,0,0] ,(split between p1 and p2) [0,1,0,1,0]
k2 = [11,12,13,14,15,16,17,18,19,20],(split between p1 and p2 This will be random)[1,1,1,0,0],[0,0,0,1,1]
此行出现错误:kid1 = np.hstack([p1[:index1],p2[index1:]])
代码:
import numpy as np
import random
def generateRandom(Population , m):
i = 0
population = []
while (i < Population):
array_first= [np.random.randint (2, size = 10)]
array_outer = np.random.randint(2,size=(m-1,5))
array_first.extend(array_outer)
population.append(array_first)
i += 1
return(population)
def mating (parents):
parent1_array = []
parent2_array= []
for i in range (int(len(parents)/2)):
parent1 = parents[i]
parent2 = parents[-i-1]
parent1_array.append(parent1)
parent2_array.append(parent2)
return (parent1_array, parent2_array)
def crossover (parent1, parent2, mutate):
kid1_array = []
kid2_array = []
kids = []
for p1,p2 in zip(parent1, parent2):
index1 = int(np.random.uniform(low=1,high=len(p1)-1))
index2 = int(np.random.uniform(low=1, high=len(p2)-1))
kid1 = np.hstack([p1[:index1],p2[index1:]])
kid2 = np.hstack([p2[:index2],p1[index2:]])
kid1_array.append(kid1)
kid2_array.append(kid2)
kids.extend((kid1,kid2))
for individual in kids:
if (mutate > random.random()):
pos_to_mutate = random.randint(0, len(individual)-1)
individual[pos_to_mutate] =random.uniform(min(individual),max(individual))
return (kids)
candidateSolution = generateRandom(100, 11)
for i in range(1):
a = random.random()
parent1 , parent2 = mating(candidateSolution)
kids = crossover( parent1 , parent2, .01 )
我希望得到的结果是两个孩子的列表将成为parent1和parent2的一部分,这些部分在某个随机点被拆分,然后重新组合。
答案 0 :(得分:1)
错误消息不言自明:
所有输入数组的维数必须相同
p1
和p2
具有那种无节制的形状[(1,10),(10,5)]使这种错误不可避免。使用一维基因组(60,)或使所有染色体的长度相同(12,5)。但是现在的样子,numpy永远不会接受将它们堆叠起来。