例如,我有一套复杂的要点:
我想在原像中绘制一个函数图像(例如,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标准函数的问题?
答案 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]])