0

I'm trying to define the exponential of the wave equation which is e^(ik(x-ct)). This is new for me, so I'm trying to understand MPC's arrays with real and imaginary numbers, and what do they mean. I'm trying to rewrite a code originally in Matlab to Python.

ik*(x-ct) equals:

array([[[mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), ..., mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0')],
        [mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         ...,
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868')],
        [mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         ...,
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174')],
        ...,
        [mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         ...,
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883')],
        [mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         ...,
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838')],
        [mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         ...,
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793')]],

       [[mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), ..., mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0')],
        [mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         ...,
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868')],
        [mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         ...,
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174')],
        ...,
        [mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         ...,
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883')],
        [mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         ...,
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838')],
        [mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         ...,
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793')]],

       [[mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), ..., mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0')],
        [mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         ...,
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868')],
        [mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         ...,
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174')],
        ...,
        [mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         ...,
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883')],
        [mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         ...,
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838')],
        [mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         ...,
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793')]],

       ...,

       [[mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), ..., mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0')],
        [mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         ...,
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868')],
        [mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         ...,
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174')],
        ...,
        [mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         ...,
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883')],
        [mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         ...,
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838')],
        [mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         ...,
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793')]],

       [[mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), ..., mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0')],
        [mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         ...,
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868')],
        [mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         ...,
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174')],
        ...,
        [mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         ...,
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883')],
        [mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         ...,
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838')],
        [mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         ...,
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793')]],

       [[mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), ..., mpc(real='0.0', imag='0.0'),
         mpc(real='0.0', imag='0.0'), mpc(real='0.0', imag='0.0')],
        [mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         ...,
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868'),
         mpc(real='3.8473413874435805e-18', imag='0.062831853071795868')],
        [mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         ...,
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174'),
         mpc(real='7.6946827748871609e-18', imag='0.12566370614359174')],
        ...,
        [mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         ...,
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883'),
         mpc(real='5.6940652534164989e-16', imag='9.2991142546257883')],
        [mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         ...,
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838'),
         mpc(real='5.7325386672909336e-16', imag='9.3619461076975838')],
        [mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         ...,
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793'),
         mpc(real='5.7710120811653693e-16', imag='9.4247779607693793')]]],
      dtype=object)

but when I try to take the exponential of ik*(x-ct), it shows me the following error message:

    AttributeError                            Traceback (most recent call last)
    AttributeError: 'mpc' object has no attribute 'exp'

    The above exception was the direct cause of the following exception:

    TypeError                                 Traceback (most recent call last)
    <ipython-input-29-d001448fd085> in <module>
    ----> 1 np.exp(i*k*(x - c*t))

    TypeError: loop of ufunc does not support argument 0 of type mpc which has no callable exp method

I'm still confused of what I'm looking at, so I dont know where to start looking. Any recommendations?

hpaulj
  • 221,503
  • 14
  • 230
  • 353
  • Your numpy array contains `mpc` objects; as such its `dtype` is object. `exp(arr)` on a object dtype array delegates the action to the `exp` method of each item. That kind of delegation usually works for things like add and multiply, but `exp` and `sin` are usually implemented as functions, not methods. – hpaulj Apr 22 '20 at 19:30
  • @ hpaulj How can I go around this problem, because in order to calculate the wave equation I need to do this? – Anthony Bernal Ayala Apr 22 '20 at 19:38
  • 1
    You may have to use a list comprehension on a list of these `mpc` objects. But do these numbers really have to be `mps/mpmath`? What wrong with normal numeric numpy arrays? – hpaulj Apr 22 '20 at 20:45

0 Answers0