Python 有没有比使用循环更有效的编码每一行的方法?

Python 有没有比使用循环更有效的编码每一行的方法?,python,numpy,encoding,vectorization,Python,Numpy,Encoding,Vectorization,我正在尝试的 我有一个数据集,每一排都是一个11人的球队,每个人都有自己的球衣号码。例如,团队A可以由[1、66、22、4、26、3、18、8、9、11、10]组成。可能的衬衫号码范围从0到99,然后我想用一个大小为100的向量表示团队,其中对应衬衫号码的索引用1标记,其他的用0标记。例如,团队A将是: [0., 1., 0., 1., 1., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0.,

我正在尝试的

我有一个数据集,每一排都是一个11人的球队,每个人都有自己的球衣号码。例如,团队A可以由
[1、66、22、4、26、3、18、8、9、11、10]
组成。可能的衬衫号码范围从0到99,然后我想用一个大小为100的向量表示团队,其中对应衬衫号码的索引用1标记,其他的用0标记。例如,团队A将是:

[0., 1., 0., 1., 1., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.,
 0., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
我尝试过的

我用一个简单的函数实现了这个转换:

def encode_lineup(kit_numbers, squad_size=100):
    encoded_lineup = np.zeros(squad_size)
    encoded_lineup[kit_numbers] = 1
    return encoded_lineup
现在,在尝试将此实现扩展到多个团队(一组团队)时,我无法想出比以下循环更好的方法:

all_encoded_lineups = np.zeros(number_of_teams, squad_size)

for i in range(number_of_teams):
    all_encoded_lineups[i] = encode_lineup(teams[i], squad_size)
我需要什么帮助

如果可能的话,我希望能更有效地实现这一点-您知道有什么建议可以将此实现矢量化,或者有任何其他想法吗

提前谢谢你

也许可以使用:

你的逻辑(不管它是什么)将创建一个索引向量,在这里你用其他东西替换零

要将其扩展到多维数组,您可以
展平
放置
,以及
重塑
,如下所示:

#!/usr/bin/env python

import numpy as np

a = np.array([1, 2, 3, 4, 5])
replace_with_value = -1
replace_at_indices = [1, 4]
np.put(a, replace_at_indices, replace_with_value)
print(a)
'''                                                                                                                                                                              
[1 -1 3 4 -1]                                                                                                                                                                    
'''