当前位置: 首页 > 知识库问答 >
问题:

如何在python中将1D值列表转换为0和1的2D网格[duplicate]

仲孙英才
2023-03-14

我想采取一个值的列表,并将其转换为一个表(2D-list)的0和1的,与一个列为源列表中的每一个唯一的数字和相同数量的行到原始。如果列索引与原始值-1匹配,则每行都将具有1。

我有完成这项任务的代码,但我想知道是否有更好/更快的方法来完成这项任务。(与下面的简化集相比,实际数据集有数百万个条目)

样本输入:

value_list = [1, 2, 1, 3, 6, 5, 4, 3]

期望输出:

output_table = [[1, 0, 0, 0, 0, 0],
                [0, 1, 0, 0, 0, 0],
                [1, 0, 0, 0, 0, 0],
                [0, 0, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 1],
                [0, 0, 0, 0, 1, 0],
                [0, 0, 0, 1, 0, 0],
                [0, 0, 1, 0, 0, 0]]

当前解决方案:

value_list = [1, 2, 1, 3, 6, 5, 4, 3]
max_val = max(value_list)

# initialize to table of 0's
a = [([0] * max_val) for i in range(len(value_list))]

# overwrite with 1's where required
for i in range(len(value_list)):
    j = value_list[i] - 1
    a[i][j] = 1

print(f'a = ')
for row in a:
    print(f'{row}')

共有2个答案

左丘凡
2023-03-14

您可以尝试以下方法:

dummy_list = [0]*6
output_table = [dummy_list[:i-1] + [1] + dummy_list[i:] for i in value_list]

输出:

output_table = [[1, 0, 0, 0, 0, 0],
                [0, 1, 0, 0, 0, 0],
                [1, 0, 0, 0, 0, 0],
                [0, 0, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 1],
                [0, 0, 0, 0, 1, 0],
                [0, 0, 0, 1, 0, 0],
                [0, 0, 1, 0, 0, 0]]
孟鸿德
2023-03-14

你可以做到:

import numpy as np

value_list = [1, 2, 1, 3, 6, 5, 4, 3]

# create matrix of zeros
x = np.zeros(shape=(len(value_list), max(value_list)), dtype='int')

for i,v in enumerate(value_list):
    x[i,v-1] = 1

print(x)

输出:

[[1 0 0 0 0 0]
 [0 1 0 0 0 0]
 [1 0 0 0 0 0]
 [0 0 1 0 0 0]
 [0 0 0 0 0 1]
 [0 0 0 0 1 0]
 [0 0 0 1 0 0]
 [0 0 1 0 0 0]]
 类似资料: