拆分和重新连接列表

时间:2018-07-06 14:28:44

标签: python numpy

我要完成的工作是使列表在随机点处拆分,然后将另一个列表的第二部分加入其中。附带的代码将以随机生成的元素(由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的一部分,这些部分在某个随机点被拆分,然后重新组合。

1 个答案:

答案 0 :(得分:1)

错误消息不言自明:

  

所有输入数组的维数必须相同

p1p2具有那种无节制的形状[(1,10),(10,5)]使这种错误不可避免。使用一维基因组(60,)或使所有染色体的长度相同(12,5)。但是现在的样子,numpy永远不会接受将它们堆叠起来。

相关问题