二进制数组

时间:2016-11-10 12:45:27

标签: python arrays

我有一个表示星期几的列向量

$ printf "C\nB\nA\nA\nC\nB" | grep -vf <(printf "A\nB\n")
C
C

我需要对这个向量进行二值化,因为原始向量中的每个项都必须转换为向量,其中数字表示索引需要为1,其余项必须为0.

[1,2,2,3,4]

2 个答案:

答案 0 :(得分:4)

通过用零组成你的二进制列表来做到这一点,除了列表理解中的给定位置,这给出了一个很好的单行:

w=[1,2,2,3,4]
m = [[0]*(pos)+[1]+[0]*(9-pos-1) for pos in w]

结果:

m = [[0, 1, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 1, 0, 0, 0, 0, 0, 0],
     [0, 0, 1, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 1, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, 0, 0, 0, 0]]

答案 1 :(得分:1)

一个简单的列表理解是:

>> vector = [1,2,2,3,4]       
>> [[int(i==j) for i in range(10)] for j in vector]
[[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]]