Я попытаюсь объяснить мою проблему здесь, не вдаваясь в подробности реального приложения, чтобы мы могли оставаться в курсе кода. По сути, мне нужно сделать операции над векторным полем. Мой первый шаг - создать поле как
x,y,z = np.meshgrid(np.linspace(-5,5,10),np.linspace(-5,5,10),np.linspace(-5,5,10))
Имейте в виду, что это обобщенный случай, в программе границы векторного поля не совпадают. В общем, я хотел бы сказать что-то вроде
u,v,w = f(x,y,z)
.
К сожалению, этот случай требует более сложных операций. Мне нужно использовать формулу, аналогичную
, где вектор r определен в программе как np.array([xgrid-x,ygrid-y,zgrid-z])
, деленный на собственную норму. По сути, это вектор, указывающий из каждой точки пространства на позицию (x, y, z)
Теперь Numpy реализовал функцию кросс-произведения, используя np.cross()
, но я не могу создать"сетка векторов", как мне нужно. У меня есть лямбда-функция, которая по существу
xgrid,ygrid,zgrid=np.meshgrid(np.linspace(-5,5,10),np.linspace(-5,5,10),np.linspace(-5,5,10))
B(x,y,z) = lambda x,y,z: np.cross(v,np.array([xgrid-x,ygrid-y,zgrid-z]))
Теперь массив v
импортирован из другого класса и, кажется, работает нормально, но второй массив, np.array([xgrid-x,ygrid-y,zgrid-z])
не правильная форма, потому что это «вектор сетки сетки» вместо «сетки сетки векторов». Моя большая проблема в том, что я не могу найти метод, с помощью которого можно отформатировать сетку таким образом, чтобы функция np.cross()
могла использовать вектор положения. Есть ли способ сделать это?
Первоначально я думал, что я мог бы сделать что-то вроде:
x,y,z = np.meshgrid(np.linspace(-2,2,5),np.linspace(-2,2,5),np.linspace(-2,2,5))
A = np.array([x,y,z])
cross_result = np.cross(np.array(v),A)
Это, однако, возвращает следующую ошибкукоторый я не могу обойти:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 1682, in cross
raise ValueError(msg)
ValueError: incompatible dimensions for cross product
(dimension must be 2 or 3)