Давайте упрощенный пример, где у меня есть массив данныхинтуитивный способ использовать 3D Numpy массивы
A = np.asarray([[1,3], [2,4]])
И эти данные должны быть преобразованы в другую форму после простого преобразования:
Q = np.asarray([[-0.5,1], [1,0.5]])
B = np.dot(Q,np.dot(A,Q.T))
print B
Теперь предположим, что у меня есть набор данных, который принимает форму массива 2d для нескольких временных шагов. Для простоты снова предположим, что эти данные всего A
скопированы на 3 временных шага. Мы можем представить эти данные как 3d-массив с размерами (2,2,N)
, где N =3
в этом случае. Третье измерение представляет собой временной индекс данных. Теперь было бы естественным требовать простой способ преобразования данных, как указано выше, но для каждого временного шага, путем интуитивного умножения трехмерных массивов, однако я только смог сделать следующую работу, которая не интуитивно понятна:
# Create the 3d data array
AA = np.tile(A,(3,1,1)) # shape (3,2,2)
BB = np.dot(Q,np.dot(AA,Q.T))
print np.all(BB[:,0,:] == B) # Returns true
так с помощью этого метода я не переделать Q
массив, чтобы сделать его работу, но теперь второе измерение действует как показатель «времени», который немного счетчик интуитивно, так как в AA
это был первый размер, который обозначал время ... В идеале я хотел бы получить решение, в котором оба AA
и BB
имеют индекс времени в третьем измерении!
Edit:
С dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
от Docs Я интересно, если я пытаюсь достичь не возможно? Кажется странным, поскольку это должно быть относительно распространенным явлением, которое может быть желательным ...
С '' numpy' 1-я ось - самая внешняя, поэтому форма '(N, 2,2)' может быть более естественной, например, с помощью команды np.array ([A1, A2, A3]) ', объединение трех массивов 2x2. Но такой поворот 'dot' может быть выполнен для работы с (2, N, 2) или (2,2, N). 'dot' обычно работает с последним тусклым и вторым до последнего тусклого. 'np.matmul' и' np.einsum' являются альтернативами. – hpaulj
@hpaulj Итак, как бы я мог выполнить умножение массива в этом случае? – Jack