У меня есть коллекция симметричных тензоров full_tensors, и я вычислил все отдельные элементы в двумерном массиве tensor_reduced. Я хочу вычислить полные full_tensors из отдельных элементов tensor_reduced. У меня есть список all_permutations_list, который содержит кортежи по всем индексам, которые должны иметь одинаковое значение (например, all_permutations_list[1]=((0, 0, 1, 0, 0, 0), (0, 1, 0, 0, 0, 0), (1, 0, 0, 0, 0, 0), (0, 0, 0, 1, 0, 0), (0, 0, 0, 0, 1, 0), ( 0, 0, 0, 0, 0, 1)), и мы имеем, что tensor_reduced.shape[1] совпадает с len(all_permutations_list).
Следующий код делает то, что я хочу:
def makeFulltensor(tensor_reduced,all_permutations_list,dim=4):
full_tensors=np.zeros((tensor_reduced.shape[0],dim,dim,dim,dim,dim,dim),dtype=tensor_reduced.dtype)
for index,all_permutations in enumerate(all_permutations_list):
for perm in (all_permutations):
full_tensors[:,perm[0],perm[1],perm[2],perm[3],perm[4],perm[5]]=tensor_reduced[:,index]
return full_tensors
Я хотел бы ускорить его, используя функции индексирования numpy, чтобы избежать внутреннего (и, возможно, внешнего) цикла for. Кто-нибудь знает эффективный способ сделать это?
Спасибо!
PS: all_permutations_list рассчитывался следующим образом:
from itertools import permutations
from itertools import combinations_with_replacement as cwr
all_permutations_list=[]
reduced_indices=list(cwr(range(4), 6))
for index,(i,j,k,l,m,n) in enumerate(reduced_indices):
all_permutations=set(permutations([i,j,k,l,m,n]))
all_permutations_list.append(all_permutations)
all_permutations_list=[tuple(x) for x in all_permutations_list]
Подробнее здесь: https://stackoverflow.com/questions/784 ... o-1d-array
Установка многомерного массива numpy по определенным индексам, равным 1D-массиву ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вычисляйте массив numpy только по определенным индексам, заданным маской
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-