Поэлементное перекрестное произведение двумерных массивов координат - PullRequest
1 голос
/ 18 июня 2020

Я работаю с набором данных, который хранит массив единичных векторов в виде массивов компонентов векторов.

Как мне использовать векторизованный код / ​​широковещательную передачу для написания чистого и компактного кода, чтобы дать крест произведение векторов поэлементно?

Например, вот метод грубой силы для перебора длины массивов, выбора координат, повторного составления двух векторов, а затем вычисления перекрестного произведения.

x = [0,0,1,1]
y = [0,1,0,1]
z = [1,0,0,1]

v1 = np.array([x,y,z])

x = [1,1,0,1]
y = [1,0,1,1]
z = [0,1,1,1]

v2 = np.array([x,y,z])

result = []
for i in range(0, len(x)):
    a = [v1[0][i], v1[1][i], v1[2][i]]
    b = [v2[0][i], v2[1][i], v2[2][i]]
    result.append(np.cross(a,b))

result

>>>

[
 array([-1,  1,  0]),
 array([ 1,  0, -1]),
 array([ 0, -1,  1]),
 array([ 0,  0,  0])
]

Я пытался понять этот вопрос и дать ответ, чтобы обобщить его, но не смог:
- Элементное перекрестное произведение векторов, содержащихся в 2 массивах с Python

1 Ответ

1 голос
/ 18 июня 2020

np.cross может работать и с 2D-массивами, вам просто нужно указать правильные оси:

np.cross(v1,v2, axisa=0, axisb=0)
array([[-1,  1,  0],
       [ 1,  0, -1],
       [ 0, -1,  1],
       [ 0,  0,  0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...