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()

2つのネストされたループを取り除くことはできますか?numpy / matplotlib標準関数を使用して問題を解決するためのより良い方法はありますか?

4

2 に答える 2

3

あなたはワンライナーでそれを行うことができます:

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

重要なのは、np.newaxisは、元の1次元配列から(N、1)と(1、N)の2次元配列を作成し、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 に答える