Функция не возвращает массив при вводе массива

Сначала опишу ситуацию: функция intence_picture строит график интенсивности электромагнитного поля заданного распределения (функции E и H). Она получает один позиционный аргумент (строка с названием графика) и словарь из 4 пунктов со значениями времени и трех пространственных координат. Половина значений - массивы, по данным которых строится график, а другие значения фиксированы. Далее выясняется, какие ключи в словаре соответствуют элементам-массивам (такие ключи заносятся в список keys_of_arrays). После этого элементы словаря, являющиеся массивами, поступают в функцию np.meshgrid. Причем в результате ее работы массивы просто перезаписываются. Затем вызывается команда plt.imshow от функции intence (которая и вычисляет интенсивность). Причем на вход ей подаются элементы словаря kwargs по ключам в том порядке, в котором стоят позиционные аргументы этой функции (сначала время t, потом массив [x, y, z]). Проблема в том, что если массивами являются позиционные аргументы x и t, то все работает нормально - функция intence выдает массив значений. Но если в словаре сделать массивами x и y, то функция intence вместо массива выдает просто число, поэтому ничего не работает. Код прилагается:

import numpy as np
import matplotlib.pyplot as plt

array_of_time = np.arange(0., 1.0*10e22, 1.0*10e20)
array_of_coord = np.arange(0., 1.0*10e13, 1.0*10e11)

c = 3e8
q = c/(4*np.pi)

def E(t, x):
    E = plane_wave_E_x(t, x, ampl=0.02, omega=6, phase=0)
    return E

def H(t, x):
    H = plane_wave_H_x(t, x, ampl=0.02, omega=6, phase=0)
    return H

def uniform_E(t, x):
    return np.array([1.+x[0]*0.,0.+x[1]*0.,0.+x[2]*0.])

def uniform_H(t, x):
    return np.array([0,1,0])

def plane_wave_H_x(t, x, ampl=0.02, omega=0.006, phase=3):
    return np.array([0, ampl*np.cos(phase - omega*t), 0])

def plane_wave_E_x(t, x, ampl=0.02, omega=0.006, phase=0):
    return np.array([0, 0, ampl*np.cos(phase - omega*t)])

def pointing_vector(t, x):
    return [q*E(t,x)[1]*H(t,x)[2] - q*E(t,x)[2]*H(t,x)[1],
            q*E(t,x)[2]*H(t,x)[0] - q*E(t,x)[0]*H(t,x)[2],
            q*E(t,x)[0]*H(t,x)[1] - q*E(t,x)[1]*H(t,x)[0]]

def intence(t, x):
    return np.sqrt(pointing_vector(t,x)[0]**2 + 
                   pointing_vector(t,x)[1]**2 + 
                   pointing_vector(t,x)[2]**2)

def intence_picture(title, **kwargs):

    keys_of_arrays = []

    for key in kwargs:
        if type(kwargs[key])==np.ndarray:
            keys_of_arrays.append(key)
    print(keys_of_arrays)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.set_title(title)
    ax.set_xlabel(keys_of_arrays[1])
    ax.set_ylabel(keys_of_arrays[0], rotation = 'horizontal')
    kwargs[keys_of_arrays[1]], kwargs[keys_of_arrays[0]] = np.meshgrid(kwargs[keys_of_arrays[0]], 
    kwargs[keys_of_arrays[1]])
    #print(kwargs['x'])
    #print(kwargs['y'])
    #print(kwargs['z'])
    #print(kwargs['t'])
    print([kwargs['x'], kwargs['y'], kwargs['z']])
    print(intence(kwargs['t'], [kwargs['x'], kwargs['y'], kwargs['z']]))
    #picture = ax.imshow(intence(kwargs['t'], [kwargs['x'], kwargs['y'], kwargs['z']]))
    #colorbar = plt.colorbar(picture, shrink=0.92) 
    #name = ('D:\Выч.инф.тех\moving of particle in EM field\intence_expanded.pdf')
    #plt.savefig(name)
    #plt.show()

intence_picture('Интенсивность', t=0, z=0, x=array_of_coord, y=array_of_coord)

Ответы (0 шт):