numpyのarrayとmatrixの作り方とか

numpy array matrixについて

参考URL http://www.eidos.ic.i.u-tokyo.ac.jp/~tau/lecture/computational_physics/slide/numpy.pdf

以下を読んでもいいけどこっちの方が見やすいからここ見てもらう方がいい
今回のNotebookをGithubにあげました
Numpy_array_marix/arraymatrix.ipynb at master · mashiroyuya/Numpy_array_marix · GitHub

numpy.array(配列)

  • 配列: データの集まり
import numpy
a = numpy.array([[1,2,3],[4,5,6]]) #2次元配列を作る(行列みたいな)
print(a) 
print(len(a)) #何次元配列か? 要素はいくつあるか?
print(a[1][1]) # 1,1 成分は何か? ちなみに数学とは違って行列の左上は0,0だから注意
[[1 2 3]
 [4 5 6]]
2
5
x = numpy.array([0,1,3,4])
y = numpy.array([3,5,3,3])
print(x + y) # 各要素の足し算
print(x * y) # 各要素の掛け算 内積ではないことに注意
print(x.dot(y)) # これが内積
[3 6 6 7]
[ 0  5  9 12]
26

matrix(行列)について

matrix(行列)とarray(配列)の違い

arrayは任意の次元のデータの集まりで汎用的なデータ(特別に行列であるとかそういうわけではない)

なので * が内積ではなく各要素の掛け算になっている

行列を扱うのであればmatrixが良い

A = numpy.matrix([[4,5],[4,2]])
B = numpy.matrix([[4,2],[1,1]])
print(A*B) #matrixでは * は内積(行列の掛け算)になる
[[21 13]
 [18 10]]

そしてarrayに使える関数のほとんどはmatrixも受け付けます。

ベクトルの内積

ベクトルの内積も結局行列の内積なので内積を取る組の行数、列数に注意しよう。
c は 1 * 3 行列
d は 1 * 3 行列
これだと (1 * 3) * (1 * 3) という行列の内積になるので計算できない。
そこでdを転置して内積をしましょう。

行ベクトルと行ベクトルじゃ内積できないから片方を転置して行ベクトル* 列ベクトルにしましょう

c = numpy.matrix([4,2,5])
d = numpy.matrix([3,3,3]).T #.Tはその行列の転置
print(c * d) # 転置を取らないとベクトルの内積は取れないことに注意
[[33]]

arrayの作り方

numpy.array([3,5,3]) #array()関数の引数に配列を入れる。[3,3]や[[3,4],[2,1]] など

output: array([3, 5, 3])

等差数列でarrayを作る 2通り

numpy.arange(1,5,0.5) #等差数列が作れる1 arrange(始点,終点,増分) 出てくる数列は終点未満まで

output: array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

numpy.linspace(3,5,6) #等差数列が作れる2 linspace(始点,終点,分割数) 出てくる数列は終点含む

output: array([ 3. , 3.4, 3.8, 4.2, 4.6, 5. ])

すべての要素が0か1

numpy.zeros((2,3)) #すべての要素が0 zeros()の引数にはデータのサイズを 1次元でいいならzeros(2)とかでもいい

output: array([[ 0., 0., 0.],
[ 0., 0., 0.]])

numpy.ones((2,2,3)) #すべての要素が1

output: array([[[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.]]])