Python 学習:numpy.meshgrid

2014-07-25 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、3、0、1、0、 2、0、0、0、0(41)で、換算ポイント 60pt 。
「グルコサミン」今朝方、2位にダウン。
「Firefox」今朝方、6位にダウン。
・-・ - -・

さて、本文。

今週初め(2014-07-21)の記事:
Python 学習:3Dグラフ表示
で書いたソースコードの中に、
  ・・・・・
  ・・・・・
  X = np.arange( -5, 5, 0.25 )
  Y = np.arange( -5, 5, 0.25 )
  X, Y = np.meshgrid( X, Y )
  ・・・・・
  ・・・・・
と、“numpy.meshgrid”があった。

そして、
その2日後(2014-07-23)の記事:
Python 学習:Axes3D・surface
では、
ソースコード:
  ・・・・・
  ・・・・・
  X = np.array( [ 1, 2, 3, 4 ] ) # <===== X 座標値が4点 ( 例 )
  Y = np.array( [ 5, 6, 7 ] ) # <===== Y 座標値が3点 ( 例 )
  X, Y = np.meshgrid( X, Y ) # <===== X, Y 共に、3行4列
  ・・・・・
  ・・・・・
についての(<紙>の理解)解説:
  ・・・・・
  ・・・・・
  3行目の“meshgrid”により、X, Y 共に、3行4列となるが、
  X == [ [ 1, 2, 3, 4 ],
       [ 1, 2, 3, 4 ],
       [ 1, 2, 3, 4 ] ]
  Y == [ [ 5, 5, 5, 5 ],
       [ 6, 6, 6, 6 ],
       [ 7, 7, 7, 7 ] ]
  の様に、行方向・列方向が対応する。
  これで、グラフの{x,y,z}値は、X,Y,Z 行列の対応する要素を集めたモノになる。
  ・・・・・
  ・・・・・
を書いた。


ここで、キッチリと整理してみた。

何はともあれ、「numpy.meshgrid」で検索。

当然ながら(?)本家マニュアルが1番目にヒット:
numpy.meshgrid - NumPy v1.8 Manual
  Return coordinate matrices from two or more coordinate vectors.
  Make N-D coordinate arrays for vectorized evaluations of
   N-D scalar/vector fields over N-D grids,
   given one-dimensional coordinate arrays x1, x2,..., xn.
  ・・・・・
  ・・・・・
でも、これは(<紙>には)難しすぎて、理解不能(汗;

ヒット2番目:
1.5. Scipy: 高水準の科学技術計算 - Scipy lecture notes
では、
  ・・・・・
  ・・・・・
  ヒント:
   ・ 変数は -2 < x < 2 と -1 < y < 1 までに制限します。
   ・ numpy.meshgrid() と ・・・・・に使ってみましょう。
   ・ ・・・・・
  ・・・・・
  ・・・・・
と、学習中の<紙>にはチンプンカンプン。

ヒット3番目:
matplotlibで3Dグラフを描画する - white wheelsのメモ
  ・・・・・
  ・・・・・
  2次元メッシュを作成するにはmeshgridメソッドを利用します。
  この関数の戻り値はX,Yに対応する行列で、Xは行にxの配列を、
  Yは列にyの配列を入れたものになっています。
  ・・・・・
  ・・・・・
と、上記(<紙>が実験して知ったこと)と同じ説明。

ヒット4番目:
Pythonの数値計算ライブラリ NumPy入門 - Rest Term
は、
  ・・・・・
  ・・・・・
  配列の生成
  まずは配列の生成方法から。生成方法はたくさんありますが、
  ここでは基本的でよく使われる方法を中心に紹介します。
  ・・・・・
  ・・・・・
の中で、解説している。
このページもブックマーク必須?


そして、
ヒット4番目:「Stack Overflow」の、
python - Numpy meshgrid in 3D
に対する回答の中に、
  Here is the source code of meshgrid:
  ・・・・・
  ・・・・・
と、解りやすい(?)ソースコードが載っている。


と云うか、

x = asarray(x)
y = asarray(y)
numRows, numCols = len(y), len(x) # yes, reversed
x = x.reshape(1,numCols)
X = x.repeat(numRows, axis=0)

y = y.reshape(numRows,1)
Y = y.repeat(numCols, axis=1)
return X, Y


とあり、

(<紙>にとっての)新たな関数:“repeat”
を知った。

この“repeat”みたいな事か?本末転倒か?
<紙>の勝手なコード: ( 上記、x, y 変数(array)に対して )

X, _ = np.meshgrid( x, range(numCols) )

や、

_, Y = np.meshgrid( range(numRows), y )

の様な事も出来ますネ
???


でも、
Pythonの数値計算ライブラリ NumPy入門 - Rest Term
に依ると、

  ## numpy.tile() で生成、要素を繰り返した配列を返す
  np.tile([0,1,2,3,4], 2)
  ===> array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4])

の様なものもあった。

そして、注意事項
  返される配列がビューかコピーになるかはきちんと把握しておいた方がいいです。
  それと
  ndarray.reshape() はよく使うのでこれも覚えておくといいかと思います。

本日はここまで。


Python 学習は続く???


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140723
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク