2012-11-11 42 views
1

例如,我有這樣一套複雜點:從一組繪製複雜功能到另一個

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

你可以使用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]]) 
3

可以用一襯墊做:

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

的一點是,np.newaxis是一種位indexing magic這產生(N,1)和(1,N)二維陣列來自原始的一維數組,然後由numpy的索引規則複製。