blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

matplotlibで3次元のグラフ

\(f:R^2 \rightarrow R\) という2次元ベクトルを引き数に取る関数を可視化したかったので、 matplotlibを使った。

code

import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as m3d
import numpy as np
def mkfig(func,(sx,ex),(sy,ey),num=10):
    X,Y,Z = np.zeros((num,num)),np.zeros((num,num)),np.zeros((num,num))
    for i,x in enumerate(np.linspace(sx,ex,num)):
        for j,y in enumerate(np.linspace(sy,ey,num)):
            X[i][j] = x
            Y[i][j] = y
            Z[i][j] = func(x,y)

    fig = plt.figure(figsize=(8, 6))
    ax = fig.add_subplot(111, projection="3d")
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_zlabel('func(x,y)')
    colors = ["red", "blue", "green"]
    import itertools as it
    ax.plot_wireframe(Y, X, Z, color=colors[2], alpha=0.7)
    ax.plot_surface(Y, X, Z, color=colors[2], alpha=0.1)
    return fig

if __name__ == "__main__":
    dim = 2
    A = np.random.random((dim,dim))
    AA = A.T.dot(A)
    AAA = AA - np.diag(np.diag(AA))
    quad = lambda x: (np.ones_like(x)-x).T.dot(AAA).dot(x)
    func = lambda x,y : quad(np.array((x,y)))
    fig = mkfig(func,(0,1),(0,1),num=40)
    fig.savefig("hoge.png")