Python 将列表索引数组转换为0的2d数组,索引正确时为1
现在,第一行返回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]]。我得到的结果是,在前几个枚举之后,都是1Python 将列表索引数组转换为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
不知道我做错了什么 好的,如果我理解正确的话,您只需要实现一个方法来完成此操作并调用它一次:
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))]
或