Python 有没有比使用循环更有效的编码每一行的方法?
我正在尝试的 我有一个数据集,每一排都是一个11人的球队,每个人都有自己的球衣号码。例如,团队A可以由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.,
[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]
'''