绘制从一组到另一组的复杂功能

时间:2012-11-11 16:10:53

标签: python numpy matplotlib scipy

例如,我有一套复杂的要点:

preimage

我想在原像中绘制一个函数图像(例如,f(z)= -cos(z)):

image

这是我的代码:

from numpy import *
import matplotlib.pyplot as plt

z_0 = []
N = 500
u = linspace(0.0, pi, N)
v = linspace(0.0, 15.0, N)
for i in xrange(N):
    for j in xrange(N):
        z_0.append(u[i] + 1j * v[j])
z = -cos(z_0)
plt.plot(real(z), imag(z), linestyle='', marker='x')
plt.grid(True)
plt.show()

我可以摆脱两个嵌套循环吗?有没有更好的方法来解决使用numpy / matplotlib标准函数的问题?

2 个答案:

答案 0 :(得分:3)

你可以用单行代码来完成:

import numpy as np
z_0 = u[:,np.newaxis] + 1j*v[np.newaxis,:]

关键是np.newaxis是indexing magic的一点,它从原始的一维数组创建(N,1)和(1,N)二维数组,然后由numpy复制索引规则。

答案 1 :(得分:2)

您可以使用numpy.meshgrid

>>> from numpy import linspace, meshgrid, pi
>>> u = linspace(0, pi, 3)
>>> v = linspace(0, 10, 3)
>>> uu, vv = meshgrid(u, v)
>>> uu
array([[ 0.        ,  1.57079633,  3.14159265],
       [ 0.        ,  1.57079633,  3.14159265],
       [ 0.        ,  1.57079633,  3.14159265]])
>>> vv
array([[  0.,   0.,   0.],
       [  5.,   5.,   5.],
       [ 10.,  10.,  10.]])
>>> z = uu + 1j * vv
>>> z
array([[ 0.00000000 +0.j,  1.57079633 +0.j,  3.14159265 +0.j],
       [ 0.00000000 +5.j,  1.57079633 +5.j,  3.14159265 +5.j],
       [ 0.00000000+10.j,  1.57079633+10.j,  3.14159265+10.j]])
相关问题