Как умножить одну и ту же матрицу на каждую строку тензора?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как умножить одну и ту же матрицу на каждую строку тензора?

Сообщение Anonymous »

Мне хотелось найти координаты куба после двух вращений (X и Y) без циклов.
Координаты куба хранятся в виде вершин:

Код: Выделить всё

cube_vertices = np.array([[0, 0, 0],
[1, 0, 0],
[1, 1, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 1],
[0, 1, 1],
[1, 1, 1]])
А я в основном работаю с краями:

Код: Выделить всё

cube_edges = np.array([[cube_vertices[0], cube_vertices[1]],
[cube_vertices[0], cube_vertices[3]],
[cube_vertices[1], cube_vertices[2]],
[cube_vertices[3], cube_vertices[2]],
[cube_vertices[1], cube_vertices[5]],
[cube_vertices[2], cube_vertices[7]],
[cube_vertices[3], cube_vertices[6]],
[cube_vertices[0], cube_vertices[4]],
[cube_vertices[4], cube_vertices[5]],
[cube_vertices[4], cube_vertices[6]],
[cube_vertices[6], cube_vertices[7]],
[cube_vertices[5], cube_vertices[7]]])
который я сохраняю, чтобы найти пересечения этих ребер с плоскостью. Ротатор задается как вращение, повторяющееся 12 раз для каждой координаты Cube_edges, поэтому я могу умножать по 0-й оси размера 12 (количество ребер) и 1-й оси размера 2 (два конца ребра) для всех координат:

Код: Выделить всё

phi, theta = 0.1, 0.1
Rx = np.tile(np.array([[1, 0, 0],
[0, np.cos(theta), -np.sin(theta)],
[0, np.sin(theta), np.cos(theta)]]), (12, 2, 1, 1))

Ry = np.tile(np.array([[np.cos(phi), 0, np.sin(phi)],
[0, 1, 0],
[-np.sin(phi), 0, np.cos(phi)]]), (12, 2, 1, 1))
Rxy = Rx * Ry
Форма Cube_edges — (12, 2, 3), а форма Rxy — (12, 2, 3, 3)< /код>. Умножение должно действовать по первым двум измерениям (12, 2) для всех одиночных вращений 3x3 на координаты точки размером (3). Я не могу понять, как использовать np.tensordot или что-то в этом роде для этой цели:

Код: Выделить всё

rotated_edges = np.tensordot(Rxy, cube_edges)
Результирующая форма Rotat_edges должна быть такой же, как у Cube_edges (12, 2, 3).
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... f-a-tensor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как умножить одну и ту же матрицу на каждую строку тензора?
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как умножить матрицу 2x3x3x3 на матрицу 2x3, чтобы получить матрицу 2x3
    Anonymous » » в форуме Python
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Как умножить матрицу 2x3x3x3 на матрицу 2x3, чтобы получить матрицу 2x3
    Anonymous » » в форуме Python
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous
  • Python 3: умножить вектор на матрицу без NumPy
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как эффективно умножить вектор на транспонированную разреженную матрицу в собственном?
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»