Matplotlib/SciPy/pandas/NumPy サンプルコード
[最終更新] (2020/07/11 22:25:10)
ここは
モノづくり総合プラットフォーム。記事の一部は有料設定にして公開できます。 詳しくはこちらをクリック📝
最近の投稿
注目の記事

概要

Python で数学的なことを試すときに利用される Matplotlib/SciPy/pandas/NumPy についてサンプルコードを記載します。

チュートリアル

インストール

pip でインストールする場合

pip のインストール

sudo apt install python-pip

ユーザ毎にインストールする場合

pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose
ls ~/.local/lib/python2.7/site-packages/

システム全体にインストールする場合

sudo pip install numpy scipy matplotlib ipython jupyter pandas sympy nose

apt/yum でインストールする場合

pip と比較してインストールされるバージョンが古くなります。

sudo apt install python-numpy python-scipy python-matplotlib ipython python-pandas python-sympy python-nose

新規 ndarray 配列の作成

import numpy as np
a = np.array([[1,0],
              [0,1]])

a = np.arange(15).reshape(3, 5)
a.resize(3,5) # 破壊的に自身を変更

型の明記

np.array( [ [1,2], [3,4] ], dtype=np.float64 )

すべて 0/1/未定 (dtype 未指定時は np.float64 )

np.zeros( (2,2), dtype=np.int64 )
np.ones( (2,2), dtype=np.int64 )
np.empty((2,2))

乱数

np.random.random((2,2))

10 以上 30 未満で +5

np.arange(10, 30, 5)
np.arange(0, 2, 0.3)

10 以上 30 以下で 10 要素

np.linspace(10, 30, 10)
np.linspace(0, 2*np.pi, 100)

コピー

b = a.copy()

一次元配列の取得

b = a.ravel()

条件を満たすインデックスを取得

a = np.array([1, 2, 3], dtype=np.uint8)
np.where(a == 2)[0][0]  #=> 1

配列としての演算

要素の合計値

np.sum(a)
a.sum()

要素の最大値

np.max(a)
a.max()

次元数

a.ndim

各次元の要素数

a.shape

全次元の要素数の合計

a.size

要素の型およびバイト数

a.dtype.name
a.dtype.itemsize
a.itemsize

各要素の値を二乗

a**2
a * a

各要素に対して条件判定

a < 2

各次元毎の演算

a.sum(axis=0) # 列j の合計
a.sum(axis=1) # 行i の合計

関数の各要素への適用

np.exp(a)
np.sqrt(a)
np.sin(a)
np.floor(a)

結合/分割

np.vstack((a,a))
np.hstack((a,a))
np.vsplit(a,999)
np.hsplit(a,999)

基本的な線形代数の演算

加減算

a + a
a - a

行列の積

a.dot(a)

転置行列

a.T
a.transpose()

逆行列

np.linalg.inv(a)

単位行列

np.eye(サイズ)

トレース

np.trace(a)

外積、内積、ノルム

from numpy import cross
from numpy import array
from numpy.linalg import norm

a = array([1,2,3])

cross(a, a)
a.dot(a)
norm(a)

軸を指定した、多次元配列 (テンソル) の転置

x = np.random.rand(1, 2, 3, 4)
y = x.transpose(1, 0, 3, 2)
print(x.shape)  #=> (1, 2, 3, 4)
print(y.shape)  #=> (2, 1, 4, 3)

可視化

画像データの表示 imshow

Uploaded Image

import numpy as np
import matplotlib.pyplot as plt

myimg = np.array([
  [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], 
  [[0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]])

plt.imshow(myimg)
plt.show()

グラフの表示 plot

Uploaded Image

import numpy as np
import matplotlib.pyplot as plt

a = np.array([9,1,9,1])

plt.plot(a)
plt.show()

移動平均による平滑化

import numpy as np
a = [1,1,1,1,1]

def MovingAverage(a, n=3):
    ret = np.cumsum(a, dtype=float)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1:] / n

MovingAverage(a)

同次変換

この続きが気になる方は

Matplotlib/SciPy/pandas/NumPy サンプルコード

残り文字数は全体の約 47 %
harubot
100 円
関連ページ
    概要 コンピュータビジョン向けライブラリの一つである OpenCV を Python から扱うための環境を準備します。 都度参照するためのドキュメント OpenCV modules OpenCV-Python Tutorials OpenCV Tutorials インストール ビルド済みバイナリを apt/yum インストールする方法
    概要 NumPy から扱えるデータをファイルに保存するためのフォーマットとして HDF5 (Hierarchical Data Format) が利用されます。これを Python から扱うためには h5py を利用します。 pip install h5py サンプルコード NumPy データの保存 import h5py import numpy as np with h5py.File
    概要 立方体を二つ配置して回転させてみます。ライブラリを用いずに OpenGL API を直接利用します。描画部分のみを IPython で検証するためのソースコードはこちらです。 wget https://gist.githubusercontent.com/harubot/df886254396a449038ee542ed317f7b3/raw/92216e02d0210b9d8177056
    概要 コンピュータグラフィックスのレンダリングライブラリの一つ OpenGL はプラットフォームに依存しない仕様となっています。プラットフォームの一つに X11 があります。プラットフォームに依存する仕様は EGL (Embedded-System Graphics Library) にまとめられています。EGL は OpenGL とネイティブプラットフォームの間のインタフェースとして機能します
    概要 ロボットを制御する際に複数の座標系を扱う必要があります。これら複数の座標系間の変換等を行うためのライブラリに tf2 (transform2) があります。C++ と Python がサポートされていますが、ここでは Python を用いて簡単な使い方を把握します。 tf2 チュートリアルと同様に動作検証のための
    概要 ROS による開発で必要となる 3D モデルは STL や COLLADA データとして作成できます。FreeCAD と Blender を用いて直方体のデータを作成してみます。いずれの場合も、ROS 等で扱うために単位はメートルで出力します。 FreeCAD による直方体 STL の作成 STL はフェイスに三角形を利用した 3D モデル
    概要 ロボットアプリケーションの開発環境の一つ OpenRAVE (Open Robotics Automation Virtual Environment) の環境を構築するための手順を記載します。ここでは特に Debian9 を利用します。 インストール 依存パッケージ ビルドツール関連 sudo apt install git build-essential cmake
    概要 3D アプリケーション間でデータを交換するためのファイルフォーマットの一つに COLLADA (COLLAborative Design Activity) があります。コンピュータグラフィックスのレンダリングに必要な情報およびその他付随する情報を格納できます。COLLADA の仕様にしたがった XML スキーマファイルの拡張子は通常
    概要 コンピュータグラフィックスのレンダリングライブラリの一つである OpenGL を Python3 から利用するための Linux 環境を準備して、設定例およびサンプルコードを記載します。特にここでは Debian9 を利用します。 Getting Started Language bindings / Python
    概要 OpenCV3 C++ を用いて基本的な画像変換を行います。 サイズの変更 (resize) #include <opencv2/opencv.hpp> int main() { cv::Mat img = cv::imread("aaa.png", -1); if(img.empty()) { return -1; } cv::M
    概要 OpenCV (C++) の基本的なデータ型について記載します。固定長の配列と、動的にメモリ領域を確保する可変長の配列があります。 固定長配列 点クラス 点クラスは、メンバ変数に .x,y,z でアクセスできる、固定長配列の一つです。 #include <opencv2/opencv.hpp> #include <iostream> int main() { cv::Poi
    概要 OpenCV を用いて、複数の画像から一枚のパノラマ画像を作成します。内部パラメータが分かっているカメラを位置を変えずに回転させて画像を取得していき、各画像を取得した時点でのカメラの向きをもとに画像を重ね合わせる方法と、各画像における特徴点が一致するように画像を重ね合わせる方法の二つについて記載します。 キャリブレーションされたカメラを定位置で回転させる方法
    概要 特徴点が分かっている既知の物体については、単一カメラを用いて位置姿勢が推定できます。物体や全体のシーンが未知である場合は、例えばステレオ形式のカメラ二つを用いることで同様の結果を得ます。具体的には、距離情報を濃淡として保存した距離画像 (Depth Map; 奥行きマップ) を作成します。 エピポーラ幾何について
    概要 こちらのページでインストールした Open Dynamics Engine (ODE) について、ボディ操作に関する API のサンプルコードを記載します。 位置姿勢の設定 位置 odepy.dBodySetPosition(body, 0.0, 0.0, 0.0) 姿勢 (回転行列) R = odepy.dMatrix3() odepy.dRSetIdentity(R) odepy
    概要 ロボットアームは複数のリンクがジョイントで結合されており、先端にマニピュレータが存在します。Open Dynamics Engine (ODE) を用いたシミュレーションを行い、ジョイントの関節値とマニピュレータの位置姿勢の関係を把握します。 順運動学によるマニピュレータの位置姿勢の計算 回転行列と回転ベクトルの変換のために以下のパッケージを利用しています。
    概要 ロボットアームのマニピュレータの位置姿勢が与えられたときに、ジョイントの関節値を求める逆運動学について、3自由度の場合を対象として解析解と数値解を用いる場合を記載します。 解析解 3 自由度の場合は解析的に逆運動学を解くことができます。以下は 4 つ存在する解析解のうちの一つを利用しています。詳細はこちらの書籍をご覧ください。
    概要 こちらのページでは、簡単のため関数の入出力となるテンソルの階数が零の場合を考えました。本ページでは一般の任意の階数のテンソルをバックプロパゲーションで扱う例を記載します。参考書籍: 『ゼロから作るDeep Learning ❸』 なお、本ページでも同様に簡単のため高階微分は考えません。 テンソルの形状を変更しない関数
    概要 こちらのページで基本的な使い方を把握した PyTorch を用いて、手書き数字の分類を行ってみます。サポートベクターマシンを用いた場合は HOG などの特徴量を考える必要がありましたが、ディープラーニングでは十分な質の良いデータがあればその必要がありません。 MNIST データの読み込み 手書き数字のデータとして、
    概要 こちらのページでインストールした PyTorch の基本的な使い方を記載します。 テンソルの計算 初期化されていない空のテンソルを作成 import torch x = torch.empty(5, 3) 乱数で初期化 (一様分布、標準正規分布) x = torch.rand(5, 3) x = torch.randn(4, 4)