Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表索引数组转换为0的2d数组,索引正确时为1_Python_Arrays - Fatal编程技术网

Python 将列表索引数组转换为0的2d数组,索引正确时为1

Python 将列表索引数组转换为0的2d数组,索引正确时为1,python,arrays,Python,Arrays,现在,第一行返回0和1的列表,表示每个数据属于哪个集群。我想把这个(例如[0,1,0,0,1,1,1])转换成一个长度为2的数组,它在上面是这样的:[[1,0],[0,1],[1,0],[1,0],[0,1],[0,1],[0,1],[0,1]]。我得到的结果是,在前几个枚举之后,都是1 不知道我做错了什么 好的,如果我理解正确的话,您只需要实现一个方法来完成此操作并调用它一次: def cluster_guess_for_each_obs(self): flat_cluster_gue

现在,第一行返回0和1的列表,表示每个数据属于哪个集群。我想把这个(例如[0,1,0,0,1,1,1])转换成一个长度为2的数组,它在上面是这样的:[[1,0],[0,1],[1,0],[1,0],[0,1],[0,1],[0,1],[0,1]]。我得到的结果是,在前几个枚举之后,都是1


不知道我做错了什么

好的,如果我理解正确的话,您只需要实现一个方法来完成此操作并调用它一次:

def cluster_guess_for_each_obs(self):
    flat_cluster_guess = [self.argmax_list(cp) for cp in self.cluster_possibilities_for_observations()]
    zero_cluster = [0.0 for i in self.clusters]
    all_zero_clusters = [zero_cluster for p in range(len(flat_cluster_guess))]
    for enum in enumerate(flat_cluster_guess):
        all_zero_clusters[enum[0]][enum[1]] = 1.0
    print all_zero_clusters
    self.cluster_assignments = all_zero_cluster 
    return

在这里,我选择了一个比“Pythonic”更具可读性的解决方案。但希望这能使您需要实现的基本逻辑变得清晰。

好的,如果我理解正确,您只需要实现一个方法来实现这一点并调用它一次:

def cluster_guess_for_each_obs(self):
    flat_cluster_guess = [self.argmax_list(cp) for cp in self.cluster_possibilities_for_observations()]
    zero_cluster = [0.0 for i in self.clusters]
    all_zero_clusters = [zero_cluster for p in range(len(flat_cluster_guess))]
    for enum in enumerate(flat_cluster_guess):
        all_zero_clusters[enum[0]][enum[1]] = 1.0
    print all_zero_clusters
    self.cluster_assignments = all_zero_cluster 
    return
guess = [0, 1, 0, 0, 1, 1, 1]

def build_array(guess):
    result = []

    for i in range(len(guess)):
        new_result.append([0,0])

    for i in range(len(result)):
        result[i][guess[i]] = 1

    return result

在这里,我选择了一个比“Pythonic”更具可读性的解决方案。但希望这能使您需要实现的基本逻辑变得清晰。

这一行并不像您认为的那样:

guess = [0, 1, 0, 0, 1, 1, 1]

def build_array(guess):
    result = []

    for i in range(len(guess)):
        new_result.append([0,0])

    for i in range(len(result)):
        result[i][guess[i]] = 1

    return result
flat = [0, 1, 0, 0, 1, 1, 1]
cluster = []
for pos in flat:
    n = [0, 0]
    n[pos] = 1
    cluster.append(n)
print cluster
# [[1, 0], [0, 1], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1]]
它重复相同的列表(不是列表的副本-指向相同的精确列表)
len(flat\u cluster\u guess)
次。这意味着,当您更改列表中的一项时,您将更改所有项

相反,将表达式
[0.0 for i in self.clusters]
移动到列表理解中,如下所示:

all_zero_clusters = [zero_cluster for p in range(len(flat_cluster_guess))]


这一行并不像你想象的那样:

flat = [0, 1, 0, 0, 1, 1, 1]
cluster = []
for pos in flat:
    n = [0, 0]
    n[pos] = 1
    cluster.append(n)
print cluster
# [[1, 0], [0, 1], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1]]
它重复相同的列表(不是列表的副本-指向相同的精确列表)
len(flat\u cluster\u guess)
次。这意味着,当您更改列表中的一项时,您将更改所有项

相反,将表达式
[0.0 for i in self.clusters]
移动到列表理解中,如下所示:

all_zero_clusters = [zero_cluster for p in range(len(flat_cluster_guess))]