#author("2023-06-30T13:29:57+09:00","external:moriat","moriat")
#author("2023-06-30T13:30:47+09:00","external:moriat","moriat")
#topicpath

** numpy [#gbedae22]
- 概要~
Python そのものは数値計算に向かない。だから特別なライブラリが必要になる。~
それが numpy である。~
ChatGPT に次のように聞いてみた。その結果を利用して学習する。~
 Pythonでnumpy を使いこなすための例題を示して
- 定義と基本的な量と参照~
#code(python){{
import numpy as np

# 1次元配列の作成
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)

# 2次元配列の作成
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)

# 3次元配列の作成
arr3 = np.array([ [[1.0, 2, 3], [4, 5, 6], [7, 8, 9]], [[-1, -2, -3], [-4, -5, -6], [-7, -8, -9]]])
print(arr3)

# 配列の形状の確認
print(arr1.shape)
print(arr2.shape)
print(arr3.shape)

# 配列の要素数の確認
print(arr1.size)
print(arr2.size)
print(arr3.size)

# 配列のデータ型の確認
print(arr1.dtype)
print(arr2.dtype)
print(arr3.dtype)

# データの参照
print( arr1[2] )   # 3つめ
print( arr2[2,1] ) # 3行、2列め
print( arr2[:,0] ) # 第1列
print( arr3[0,1,2] ) # 最初の3x3 の行列の2行3列め
print( arr3[:,0,:] ) # 行列になる 
}}~
~
※ コメント~
  ・ 3次元配列に、ひとつでも浮動小数点のデータをがあると、全体が float64 に~
  ・ 3次元配列で、arr3[:,0,:] では、2つの「2次元配列の1行目」からなる行列に~
~
- 配列に対する操作~
#code(python){{
# 配列の要素の合計
print(np.sum(arr1))
print(np.sum(arr2))
print(np.sum(arr3))

# 配列の最大値と最小値
print(np.max(arr1))
print(np.max(arr2))
print(np.max(arr3))

print(np.min(arr1))
print(np.min(arr2))
print(np.min(arr3))

# 配列の平均値と中央値
print(np.mean(arr1))
print(np.mean(arr2))
print(np.mean(arr3))
print(np.median(arr1))
print(np.median(arr2))
print(np.median(arr3))

# 配列の転置
print(arr2.T)
print(arr3.T)

# 配列の要素の順番を反転
print(np.flip(arr1))
print(np.flip(arr2, axis=0))
print(np.flip(arr2, axis=1))
print(np.flip(arr3, axis=0))
print(np.flip(arr3, axis=1))
print(np.flip(arr3, axis=2))
}}~
※ コメント~
  ・ 2次元の配列の転置は普通の意味の転置。~
  ・ 3次元の配列の転置は第1引数と第3引数が入れ替わる。~
   例: arry3[0,2,1] と arr3.T[1,2,0] とが同じ。~
  ・ flip については、試してみるとわかる。
~
- 以下、未完。
 更に付け加えることは?
#code(python){{
import numpy as np

# 等間隔の数値からなる配列の生成
arr3 = np.linspace(0, 10, 5)
print(arr3)

# ゼロ行列の生成
zeros = np.zeros((3, 3))
print(zeros)

# 1で埋められた行列の生成
ones = np.ones((2, 4))
print(ones)

# 特定の値で埋められた行列の生成
filled = np.full((3, 3), 7)
print(filled)

# ランダムな値で埋められた行列の生成
random = np.random.random((2, 2))
print(random)

# 行列の要素ごとの足し算
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = a + b
print(result)

# 行列の要素ごとの掛け算
result = a * b
print(result)

# 行列の積の計算
result = np.dot(a, b)
print(result)

# 行列の転置
print(a.T)

# 行列の要素の合計(行または列ごと)
print(np.sum(a, axis=0))  # 列ごとの合計
print(np.sum(a, axis=1))  # 行ごとの合計

# 行列の要素の平均(行または列ごと)
print(np.mean(a, axis=0))  # 列ごとの平均
print(np.mean(a, axis=1))  # 行ごとの平均
}}
 更に例を追加して
#code(python){{
import numpy as np

# 条件を満たす要素の抽出
arr4 = np.array([1, 2, 3, 4, 5])
even_nums = arr4[arr4 % 2 == 0]
print(even_nums)

# 配列の要素の並び替え
arr5 = np.array([3, 1, 4, 2, 5])
sorted_arr5 = np.sort(arr5)
print(sorted_arr5)

# 行列の結合
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
concatenated = np.concatenate((matrix1, matrix2), axis=0)
print(concatenated)

# 行列の分割
split_arr = np.array([1, 2, 3, 4, 5, 6])
split_parts = np.split(split_arr, 3)
print(split_parts)

# 行列の形状の変更
reshape_arr = np.array([1, 2, 3, 4, 5, 6])
reshaped = np.reshape(reshape_arr, (2, 3))
print(reshaped)

# 行列の要素の重複の削除
arr6 = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
unique_vals = np.unique(arr6)
print(unique_vals)

# 行列の要素のインデックスの取得
arr7 = np.array([10, 20, 30, 40, 50])
index = np.where(arr7 == 30)
print(index)

# 行列の要素の統計情報
arr8 = np.array([[1, 2, 3], [4, 5, 6]])
print(np.min(arr8, axis=1))  # 行ごとの最小値
print(np.max(arr8, axis=0))  # 列ごとの最大値
print(np.mean(arr8, axis=1))  # 行ごとの平均値
print(np.std(arr8, axis=0))  # 列ごとの標準偏差
}}
 特に、気象レーダーのデータを扱うときに重要と思われる例は?
++ レーダー画像の可視化と表示: numpy を使用して、レーダーデータを可視化し、画像として表示する方法が重要です。以下は、matplotlibライブラリを使用してレーダーデータを表示する例です。
#code(python){{
import numpy as np
import matplotlib.pyplot as plt

# レーダーデータの読み込み
radar_data = np.loadtxt("radar_data.txt")

# データの可視化と表示
plt.imshow(radar_data, cmap="rainbow")
plt.colorbar()
plt.show()
}}
++ レーダーデータのフィルタリング: レーダーデータにはノイズや不要な信号が含まれることがあります。numpy を使用して、レーダーデータをフィルタリングすることで、ノイズを除去し、よりクリアな情報を抽出することができます。
#code(python){{
import numpy as np
from scipy.ndimage import gaussian_filter

# レーダーデータの読み込み
radar_data = np.loadtxt("radar_data.txt")

# ガウシアンフィルタを使用したデータの平滑化
smoothed_data = gaussian_filter(radar_data, sigma=2)

# データの可視化と表示
plt.imshow(smoothed_data, cmap="rainbow")
plt.colorbar()
plt.show()
}}
++ レーダーデータの統計情報の計算: レーダーデータから統計情報を計算することは、気象解析や予測において重要です。numpy を使用して、最大値、最小値、平均値、標準偏差などの統計情報を計算することができます。
#code(python){{
import numpy as np

# レーダーデータの読み込み
radar_data = np.loadtxt("radar_data.txt")

# 最大値、最小値、平均値、標準偏差の計算
max_value = np.max(radar_data)
min_value = np.min(radar_data)
mean_value = np.mean(radar_data)
std_value = np.std(radar_data)

print("Max Value:", max_value)
print("Min Value:", min_value)
print("Mean Value:", mean_value)
print("Standard Deviation:", std_value)
}}

トップ   編集 差分 添付 複製 名前変更 リロード   新規 検索 最終更新   ヘルプ   最終更新のRSS