Я пытаюсь создать функцию, которая возводит в степень двумерную матрицу и сохраняет результат в трехмерном массиве, где первое измерение индексирует показатель степени. Это важно, потому что строки матрицы, которую я возводил в степень, представляют информацию о различных вершинах графа. Так, например, если у нас есть A, A ^ 2, A ^ 3, каждый из них имеет форму (50,50), и я хочу матрицу D = (3,50,50), чтобы я мог перейти к D [:, 1,:], чтобы получить всю информацию об узле 1 и иметь возможность умножения матрицы с этим. Мой код в настоящее время имеет вид
def expo(times,A,n):
temp = A;
result = csr_matrix.toarray(temp)
for i in range(0,times):
temp = np.dot(temp,A)
if i == 0:
result = np.array([result,csr_matrix.toarray(temp)]) # this creates a (2,50,50) array
if i > 0:
result = np.append(result,csr_matrix.toarray(temp),axis=0) # this does not work
return result
Однако это не работает, потому что в случае «i> 0» временный массив имеет форму (50,50) и не может быть добавлен. Я не уверен, как заставить это работать, и я довольно смущен размерностью в Numpy, например, почему мысли (50,1) иногда и просто (50,) другие времена. Сможет ли кто-нибудь помочь мне заставить этот код работать и объяснить, как все это нужно делать в Numpy?