numpy配列を扱う
配列を扱うのは numpy を使うのが簡単です。使い始めは簡単ですが、やれることが多すぎてびっくりしてしまいます。複雑なことをやるにはそれなりに難しいので、十分にテストしてから実戦に投入してください。
import numpy as np
import math
import matplotlib.pyplot as plt
# 配列の要素数.
NUM = 16
#----------------------------------------
# ゼロ初期化.
a = np.zeros( NUM )
print( "zeros" )
print( a )
#----------------------------------------
# イチ初期化.
b = np.ones( NUM )
print( "ones" )
print( b )
#----------------------------------------
# 任意値で初期化,
value = math.pi # 円周率.
c = np.full( NUM, value )
print( "full" )
print( c )
#----------------------------------------
# 配列を数列で初期化する.
u = np.arange( NUM )
# これも同じ結果になる.
# u = np.arange( 0, NUM )
print( "1次元配列" )
print( u )
#----------------------------------------
num_row = 2
num_col = 8
print( "{0}行{1}列".format( num_row, num_col ) )
if ( num_row * num_col ) == NUM :
# 配列を2次元に変形する.
u28 = u.reshape( num_row, num_col )
print( u28 )
else:
print( "error u28." )
#----------------------------------------
num_row = 8
num_col = 2
print( "{0}行{1}列".format( num_row, num_col ) )
if ( num_row * num_col ) == NUM :
# 配列を2次元に変形する.
u82 = u.reshape( num_row, num_col )
print( u82 )
else:
print( "error u82." )
#----------------------------------------
# 配列の型変換を実施する.
print( "arr" )
arr = u
print( arr )
print( arr.dtype )
# float32 に変換する.
print( "arr_f32" )
arr_f32 = arr.astype( np.float32 )
print( arr_f32 )
print( arr_f32.dtype )
# float32 から int32 に戻す.
print( "arr_i32" )
arr_i32 = arr_f32.astype( np.int32 )
print( arr_i32 )
print( arr_i32.dtype )
#----------------------------------------
# データに乱数を仕込む.
data = np.random.rand( NUM )
for n in range( len( data )):
print( "[{0}]\t{1}".format( n, data[n] ) )
# 最小値と最大値を取得する.
value_min = np.min( data )
value_max = np.max( data )
print( "min is {0}".format( value_min ))
print( "max is {0}".format( value_max ))
# 最小値と最大値が格納されている要素のインデックスを取得する.
index_value_min = np.argmin( data )
index_value_max = np.argmax( data )
print( "min index is {0}".format( index_value_min ))
print( "max index is {0}".format( index_value_max ))
#----------------------------------------
# 三角関数データを仕込む.
NUM_DATA = 4096
value_start = -( 2.0 * math.pi )
value_stop = +( 2.0 * math.pi )
# endpoint が True の場合は value_stop を含む、False は含まない.
t = np.linspace( value_start, value_stop, num = NUM_DATA, endpoint = True )
# 三角関数データを取得する.
ft0 = np.sin( t )
ft1 = np.cos( t )
ft2 = np.sinc( t )
ft3 = np.tan( t )
# フィギュアを取得する.
fig = plt.figure()
# プロットのスタイルを設定する.
plt.style.use( "ggplot" )
# グラフ描画領域を追加する.
ax = fig.add_subplot( 1, 1, 1 )
# x軸, y軸のラベルを設定する.
ax.set_xlabel( "t" )
ax.set_ylabel( "f(t)" )
# 三角関数のデータをグラフにプロットする.
ax.plot( t, ft0, label = "f(t) = sin(t)")
ax.plot( t, ft1, label = "f(t) = cos(t)")
ax.plot( t, ft2, label = "f(t) = sinc(t)")
# tan をいれると最大最小が無限小と無限大になるので sin と cos と sinc が視認できない.
#ax.plot( t, ft3, label = "f(t) = tan(t)")
# 凡例は左下に表示する.
ax.legend( loc = "lower left" )
# 全部準備ができたら表示する.
plt.show()
下記が実行結果です。
zeros
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
ones
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
full
[3.14159265 3.14159265 3.14159265 3.14159265 3.14159265 3.14159265
3.14159265 3.14159265 3.14159265 3.14159265 3.14159265 3.14159265
3.14159265 3.14159265 3.14159265 3.14159265]
1次元配列
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
2行8列
[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]]
8行2列
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]
[12 13]
[14 15]]
arr
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
int32
arr_f32
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.]
float32
arr_i32
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
int32
[0] 0.06401046525570153
[1] 0.06441649062791
[2] 0.8808807485973807
[3] 0.008994661508332613
[4] 0.2785420803014089
[5] 0.3429880577742197
[6] 0.1896763389916537
[7] 0.296343340333196
[8] 0.7696854864831936
[9] 0.3075024455451013
[10] 0.8020368865103176
[11] 0.5577516965347638
[12] 0.6687433509482585
[13] 0.28572773102521
[14] 0.8826518174322268
[15] 0.5515740048199201
min is 0.008994661508332613
max is 0.8826518174322268
min index is 3
max index is 14