Очень сложная проблема для вас, пандусов. В настоящее время у меня есть матрица A, представляющая собой простую базу данных:
A = pd.DataFrame(columns= ['name','attribute1','attribute2']...)
В приведенном ниже списке указываются все комбинации имен в A длиной 3: например, AB C, ACD, ARG и др. * 1020. * ..
index = list((i,j,k) for ((i,_),(j,_),(k,_)) in itertools.combinations(enumerate(A['name']),3))
Я перечисляю здесь, чтобы я мог вернуться к любому заданному c комбо, сгенерированному позже.
Теперь у меня есть другой список весов перестановок, представляющий веса, которые будут применены к каждое имя в A:
weights = list(itertools.permutations([-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10],3))
генерирует такие веса, как [(1,2,3), (- 2,4,1) ..] et c
Мне нужно матрица результатов / фрейм данных, который находится в той же структуре, что и A, с именами, представляющими комбинацию имен A, ie. AB C и атрибуты в результатах являются линейными комбинациями весов с атрибутами в A ie.
A.dot(weight)
Я пытался зацикливаться на отдельных строках, но время вычислений слишком велико, код, подобный приведенному ниже, работать не будет:
for x in weights:
part1 = x[0]
part2 = x[1]
part3 = x[2]
q = 0
while q < len(results):
ind1 = results['index'][q][0]
ind2 = results['index'][q][1]
ind3 = results['index'][q][2]
results['name'][q] = ''.join((str(A['name'][ind1]),str(a['name'][ind2]),str(A['name'][ind3])))
results['attrib1'][q] = part1 * A['attrib1'][ind1]+part2*A['attrib1'][ind2] + part3*A['attrib1'][ind3]
results['attrib2'][q] = part1 * A['attrib2'][ind1]+part2*A['attrib2'][ind2] + part3*A['attrib2'][ind3]