今更だけどIDLEとNumPy
Pythonを扱うのにVSCODEを使ってきた。Debugの昨日も付いているし一々コマンドプロントとエディターの間を行き来する必要もないから。
しかし、PythonにはIDLEという開発環境がPythonと一緒にインストールされる。

このIDLEでもデバッグは可能だし、IDLEから実行も可能なので暫くIDLEを使ってみることにした。
IDLEの稼働状況は

こんな感じ。
VSCODEでPythonを使う場合色々設定が必要だが、IDLEの場合は一緒にインストールされ、何も設定は必要ないので、とりつきやすいかもしれない。
なにしろ、私もPythonは使い始めで知らないことが多い。
NumPyで配列
Pythonには数多くのライブラリが存在する。というよりむしろそのライブラリがあってこそのPythonといえるのかもしれない。
前回までに使用したcsvもライブラリのひとつである。
NumPyは大規模な多次元配列や行列をサポートし、かつ高速に行列演算ができる・・・というライブラリである、らしい。
前回はPythonは数値計算には向いてないようだと書いたが、大幅に前言撤回の必要がある。
NumPyの詳しいことはググって見てほしい。
前回までは
test_data = [[0]*m for i in range(n)] result = [[0]*3 for i in range(maxn)]
のようにリストを利用して配列を構成していた。
resultには本来構造化配列を使用したいと思っていたが、それが無いので単に2次元配列で代替えしていた。
しかし、NumPyは2次元配列も構造化配列もサポートしている。
NumPyのインストール
csvは前回も使用しているライブラリだが、インストールせずに宣言することができたが、NumPyはpipを使ってインストールする必要がある。
コマンドプロンプトで >pip install numpy
でインストールできる。
pipはPythonをインストールする際に、一緒にインストールされている。
配列の再定義は
import csv
import numpy as np
maxn = 43
n = 2000
m = 6
t_number = np.dtype([("score","f4"),("fre","i4",(3))])
test_data = np.zeros([n,m])
result = np.zeros(45,dtype = t_number)
t_number = np.dtype([(“score”,”f4″),(“fre”,”i4″,(3))])
は、構造体の定義、ということになるか。
score:後で評価値(浮動少数)、fre:出現回数3個の配列(整数)
の型の宣言
test_data = np.zeros([n,m])は、test_dataに2000×6の配列の確保。
result = np.zeros(45,dtype = t_number)は、t_numberの型で45個の配列を確保する。
リストを使った配列よりも少し考え方が複雑だが、後で計算や出力するときには逆に楽になる。
データの読み込み、出現回数の計算を含めたソースは
import csv
import numpy as np
maxn = 43
n = 2000
m = 6
t_number = np.dtype([("score","f4"),("fre","i4",(3))])
test_data = np.zeros([n,m])
result = np.zeros(45,dtype = t_number)
def dataload():
with open('d:\ROTO_6\data.csv','r') as f:
reader = csv.reader(f)
i=0
for row in reader:
#print(row)
j=0
for data in row:
if j > 0 :
test_data[i][j-1] = int(data)
j = j+1
i = i+1
f.close()
return i
def freq():
for i in range(maxn):
num = 0
for j in range(numn):
for k in range(6):
n = test_data[j][k]
if n == (i+1):
num+=1
#print(k,j,i+1)
result["fre"][i][0] = num
numn = dataload()
for i in range(numn):
v1 = test_data[i]
print(i+1,v1)
freq()
for i in range(maxn):
print(result["score"][i],result["fre"][i])
この中で、result[“fre”][i][0] = numは、resultの配列のi番目のデータのfre型の配列の0番目のデータを意味する。
普通の(C,C#,Delphi)言語をやっていると逆に分かりにくい(思うのだが)
そして、その結果は
====== RESTART: D:\ROTO_6\roto6(2).py ===
1 [ 2. 8. 10. 13. 27. 30.]
2 [ 1. 9. 16. 20. 21. 43.]
3 [ 1. 5. 15. 31. 36. 38.]
4 [16. 18. 26. 27. 34. 40.]
5 [ 9. 15. 21. 23. 27. 28.]
6 [ 6. 12. 23. 25. 28. 38.]
.
.
.
1380 [ 1. 3. 24. 26. 29. 33.]
1381 [ 2. 4. 5. 16. 19. 38.]
1382 [ 8. 9. 12. 25. 26. 28.]
1383 [ 2. 4. 9. 15. 18. 39.]
1384 [ 3. 6. 13. 32. 38. 43.] ここまでデータの確認
1 0.0 [185 0 0]
2 0.0 [198 0 0]
3 0.0 [197 0 0]
4 0.0 [192 0 0]
5 0.0 [192 0 0]
.
.
.
40 0.0 [179 0 0]
41 0.0 [177 0 0]
42 0.0 [190 0 0]
43 0.0 [198 0 0] score,[fre[0],fre[1],fre[2]]
開発環境も含めかなり後戻りになったが、これから後の作業が進めやすくなった。
と、いうことで
再スタート