有没有比使用循环更有效的编码每一行的方法?
Is there a more efficient way of encoding every row than using a loop?
我在尝试什么
我有一个数据集,其中每一行都是一个由 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)
我需要什么帮助
如果可能的话,我想更有效地做到这一点 - 你知道对矢量化这个实现有什么建议,或者任何其他想法吗?
提前致谢!
也许使用 put
function:
#!/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]
'''
您的逻辑(无论它是什么)将创建一个索引向量,您可以在其中用其他内容替换零。
要将其扩展到多维数组,您可以 flatten
、put
和 reshape
,如此处所建议:
我在尝试什么
我有一个数据集,其中每一行都是一个由 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)
我需要什么帮助
如果可能的话,我想更有效地做到这一点 - 你知道对矢量化这个实现有什么建议,或者任何其他想法吗?
提前致谢!
也许使用 put
function:
#!/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]
'''
您的逻辑(无论它是什么)将创建一个索引向量,您可以在其中用其他内容替换零。
要将其扩展到多维数组,您可以 flatten
、put
和 reshape
,如此处所建议: