1

例如,我有这样一组复杂的点:

原像

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

图片

这是我的代码:

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 标准函数来解决这个问题?

4

2 回答 2

3

你可以用单线做到这一点:

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

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

于 2012-11-11T16:22:05.240 回答
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]])
于 2012-11-11T16:27:16.737 回答