Vectors in Python

Linear Algebra

NumPy

Vector operation ベクトル演算

import numpy as np

theta = (1/4) * np.pi
phi = (1/4) * np.pi

e1 = np.array([np.sin(theta) * np.cos(phi), \
              np.sin(theta) * np.sin(phi), \
                np.cos(theta)])
print('Type of e1: {type}'.format(type=type(e1)))
# Type of e1: 

print('e1 = {e1}'.format(e1=e1))
# e1 = [0.5        0.5        0.70710678]
print('Norm of e1 = {e1norm}'.format(e1norm=np.linalg.norm(e1)))
# Norm of e1 = 1.0000000000000002

rmag = 2
r = rmag * e1    # Scalar Multiplication
print('r = {r}'.format(r=r))
# r = [1.         1.         1.41421356]
print('Norm of r = {rnorm}'.format(rnorm=np.linalg.norm(r)))
# Norm of r = 2.0000000000000004

rnorm = r / np.linalg.norm(r)   # Unit Vector
print('rnorm = {rnorm}'.format(rnorm=rnorm))
# rnorm = [0.5        0.5        0.70710678]
print('Norm of rnorm = {rnormnorm}'.format(rnormnorm=np.linalg.norm(rnorm)))
# Norm of rnorm = 0.9999999999999999

theta = (-1/4) * np.pi

e2 = np.array([np.sin(theta) * np.cos(phi), \
               np.sin(theta) * np.sin(phi), \
                np.cos(theta)])
print('e2 = {e2}'.format(e2=e2))
# e2 = [-0.5        -0.5         0.70710678]
print('Norm of e2 = {e2norm}'.format(e2norm=np.linalg.norm(e2)))
# Norm of e2 = 1.0000000000000002

esum = e1 + e2   # Sum
print('esum = {esum}'.format(esum=esum))
# esum = [0.         0.         1.41421356]
print('Norm of esum = {esumnorm}'.format(esumnorm=np.linalg.norm(esum)))
# Norm of esum = 1.4142135623730951

ediff = e1 - e2  # Diffrence
print('ediff = {ediff}'.format(ediff=ediff))
# ediff = [1. 1. 0.]
print('Norm of ediff = {ediffnorm}'.format(ediffnorm=np.linalg.norm(ediff)))
# Norm of ediff = 1.4142135623730954

edot = np.dot(e1, e2)   # Scalar Product
print('edot = {edot}'.format(edot=edot))
# edot = -1.1102230246251565e-16

ecross = np.cross(e1, e2)   # Vector Product
print('ecross = {ecross}'.format(ecross=ecross))
# ecross = [ 0.70710678 -0.70710678  0.        ]
print('Norm of ecross = {ecrossnorm}'.format(ecrossnorm=np.linalg.norm(ecross)))
# Norm of ecross = 1.0000000000000002

VPython

Installation インストール

$ pip install vpython

Vector operation ベクトル演算

from vpython import *

theta = (1/4) * pi
phi = (1/4) * pi

e1 = vector(sin(theta) * cos(phi), \
           sin(theta) * sin(phi), \
            cos(theta))
print('Type of e1: {type}'.format(type=type(e1)))
# Type of e1: <class 'vpython.cyvector.vector'>

print('e1 = {e1}'.format(e1=e1))
# e1 = <0.5, 0.5, 0.707107>
print('e1x = {e1x}, e1y = {e1y}, e1z = {e1z}'.format(e1x=e1.x, e1y=e1.y, e1z=e1.z))
# e1x = 0.5000000000000001, e1y = 0.5000000000000001, e1z = 0.7071067811865476
print('Norm of e1 = {e1mag}'.format(e1mag=e1.mag))
# Norm of e1 = 1.0000000000000002

rmag = 2
r = rmag * e1    # Scalar Multiplication
print('r = {r}'.format(r=r))
# r = <1, 1, 1.41421>
print('Norm of r = {rmag}'.format(rmag=r.mag))
# Norm of r = 2.0000000000000004

rnorm = r.norm()    # Unit Vector
print('rnorm = {rnorm}'.format(rnorm=rnorm))
# rnorm = <0.5, 0.5, 0.707107>
print('Norm of rnorm = {rnormmag}'.format(rnormmag=rnorm.mag))
# Norm of rnorm = 0.9999999999999999

theta = (-1/4) * pi

e2 = vector(sin(theta) * cos(phi), \
            sin(theta) * sin(phi), \
                cos(theta))
print('e2 = {e2}'.format(e2=e2))
# e2 = <-0.5, -0.5, 0.707107>
print('Norm of e2 = {e2mag}'.format(e2mag=e2.mag))
# Norm of e2 = 1.0000000000000002

esum = e1 + e2   # Sum
print('esum = {esum}'.format(esum=esum))
# esum = <0, 0, 1.41421>
print('Norm of esum = {esummag}'.format(esummag=esum.mag))
# Norm of esum = 1.4142135623730951

ediff = e1 - e2  # Diffrence
print('ediff = {ediff}'.format(ediff=ediff))
# ediff = <1, 1, 0>
print('Norm of ediff = {ediffmag}'.format(ediffmag=ediff.mag))
# Norm of ediff = 1.4142135623730954

edot = dot(e1, e2)   # Scalar Product
print('edot = {edot}'.format(edot=edot))
# edot = -1.1102230246251565e-16

ecross = cross(e1, e2)   # Vector Product
print('ecross = {ecross}'.format(ecross=ecross))
# ecross = <0.707107, -0.707107, 0>
print('Norm of ecross = {ecrossmag}'.format(ecrossmag=ecross.mag))
# Norm of ecross = 1.0000000000000002

Reference 参考

math --- 数学関数
このモジュールは、 C 標準で定義された数学関数へのアクセスを提供します。 これらの関数で複素数を使うことはできません。複素数に対応する必要があるならば、 cmath モジュールにある同じ名前の関数を使ってください。ほとんどのユーザーは複素...
NumPy
NumPyが広く利用される理由 強力な多次元配列、数値計算ツール群、相互運用性、高いパフォーマンス、オープンソース
VPython
Pythonによるデータ分析入門 第3版
NumPy、SciPy、pandas、Matplotlib、Jupyterをはじめ、高機能で使いやすい数学・科学計算用ライブラリが充実しているPythonは、科学計算、統計解析、機械学習のみならず、金融や経済分野でも広く利用されています。本...
VPythonで見て学ぶ 物理シミュレーション入門 | 理工・サイエンス,数学・統計・物理 | Gihyo Direct
技術評論社「公式」の紙書籍販売サイトです。紙書籍のほか、限定商品などの販売も行います。
タイトルとURLをコピーしました