Я пытаюсь настроить некоторый код для выполнения некоторых численных расчетов на трехмерных векторных полях, таких как электрические или магнитные поля. У меня проблемы с настройкой моих мешей так, как мне бы хотелось.
Рассмотрим эту программу:
import numpy as np
X1, Y1, Z1 = np.meshgrid(np.linspace(-10,10,10),np.linspace(-10,10,10),np.linspace(-10,10,10))
def scalarf(x,y,z):
return x**2 + y**2 + z**2
def vectorf(x,y,z):
return np.array([y,x,z])
def afunc(p,v):
return np.cross(p,v)
V = scalarf(X1,Y1,Z1)
F = vectorf(X1,Y1,Z1)
# This line clearly not working
F2 = afunc(F,np.array([1,0,0]))
print (V.shape)
print (F.shape)
Вывод этого дает (10,10,10) для V и (3,10,10,10) для F. Таким образом, V представляет собой массив скалярных значений 10x10x10, как и предполагалось. Но для F я хотел получить массив из 3 элементов размером 10x10x10, представляющий математические трехмерные векторы. Вместо этого у меня есть массив из 3 элементов, содержащий массив 10x10x10 в качестве каждого из его элементов. Итак, я предполагаю, что хочу (10,10,10,3) форму. В конечном итоге я хочу иметь возможность (например) запускать такие функции, как afun в приведенном выше. Опять же, здесь предполагается, что теперь F2 будет новым массивом векторов 10x10x10. На данный момент это просто не удается, потому что я предполагаю, что он пытается выполнить перекрестное произведение с массивом 10x10x10 и фиксированным трехмерным вектором в вызове функции.
Правильно ли я делаю это дистанционно? Есть ли другой способ создания трехмерного массива векторов? Кстати, я также пытался использовать mgrids с почти таким же результатом.
Любая помощь, указывающая мне правильное направление, очень ценится.