前提・実現したいこと
今10行10列のcsvファイル
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21....................................30
. . .
. . .
. . .
. . .
. . .
. . .
91....................................100
それに対して
0 0 0
0 1 0
0 0 0
というフィルターをかけたいです.
つまり,最初に2行2列目の12を中心に,
10+20+30+110+121+130+210+220+230 = 12というような計算をしたいです.
次に右に1つスライドして
20+30+40+120+131+140+220+230+240 = 13というような計算です.
今,ためしにまず1行のときに
1 2 3 4 5 6 7 8 9 10
というデータがあるときに,
0 1 0
というフィルターをかけるようなコードは作れました.
例えば,i行l列というような感じでfor分でループさせるというようなことを考えたのですが
どうすれば数字の要素をi行l列で表現できますか?
分かりにくいと思いますので,例えば
i行l列の要素をelement[i,l]とすれば,
element[2,2] = 12
element[1,8] = 8
というような[i,l]のラベルをどうすれば数字の行列に与えることができますか.
今,自分でも考えていますが,もし既にご存じでしたら教えてください.
現状の1列の場合のコードを今は載せておきます.
###現状の1次元の畳み込み演算のコード
Python3
1f=open('data.csv','r') 2x=f.readlines() 3f.close() 4 5peakpressure=[] 6num3=len(x) 7 8for i in range(num3): 9 peakpressure.append(float(x[i])) 10 11print("peakpressure") 12print(peakpressure) 13filtering = [0.33333,0.33333,0.33333] 14print("filtering") 15print(filtering) 16print('\n') 17num=len(filtering) 18num2=len(peakpressure) 19sum1=[] 20sum2=[] 21 22for l in range(num2-2): 23 for i in range(num): 24 a=peakpressure[l]*filtering[i] 25 print(a) 26 sum1.append(a) 27 l=l+1 28 print(sum1) 29 b=sum(sum1) 30 print(round(b,3)) 31 sum2.append(round(b,3)) 32 del sum1[:] 33 print('\n') 34print(sum2) 35 36f2=open('out.txt','w') 37for i in range(num2-2): 38 f2.write(str(sum2[i])) 39 f2.write('\n') 40f2.close()
出力結果
Python3
11.333 21.667 31.333 41.667 51.333 61.667 71.333 81.667
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/20 12:48 編集
2018/12/20 13:09