如何绘制涉及复数的图形?

时间:2014-10-28 20:54:22

标签: python numpy graph matplotlib typeerror

我想绘制1/(1+(i)(omega)(tau))幅度与频率f的关系图,其中i是虚数,omega=(2)(pi)(f)tau是不变。以下是代码的第一部分:

import pylab as pl
import numpy as np

f=np.logspace(-2,4,10)
tau=1.0
omega=2*np.pi*f
y=np.complex(1,omega*tau)
print y

但是我得到了TypeError: only length-1 arrays can be converted to Python scalars。有什么问题?为什么我不能将f(这是一个数组对吗?)放到y?顺便说一下,我正在使用enthought canopy

还有一个问题: pylabmatplotlib之间有什么区别?不同的模块?如果我只是绘制图形,处理复数和矩阵,我应该使用哪一个?

2 个答案:

答案 0 :(得分:3)

您无法使用np.complex构建numpy数组。在python中,当你将一个j放在一个数字之后,它会让它成为虚构的。因此,制作复杂的数组只需:

y = 1 + omega * tau * 1j

答案 1 :(得分:1)

这是必须使用np.vectorize的情况。也就是说,

  def main():
        f = np.logspace(-2,4,10)
        print(f)
        tau=1.0
        omega=2*np.pi*f
        y=np.vectorize(complex)(1,omega*tau)
        print (y)

,将首先返回:

[  1.00000000e-02   4.64158883e-02   2.15443469e-01   1.00000000e+00
   4.64158883e+00   2.15443469e+01   1.00000000e+02   4.64158883e+02
   2.15443469e+03   1.00000000e+04]

然后返回:

[ 1. +6.28318531e-02j  1. +2.91639628e-01j  1. +1.35367124e+00j
  1. +6.28318531e+00j  1. +2.91639628e+01j  1. +1.35367124e+02j
  1. +6.28318531e+02j  1. +2.91639628e+03j  1. +1.35367124e+04j
  1. +6.28318531e+04j]