質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1230閲覧

python 数字に行と列番号を定義したい.

Tubasa1995

総合スコア83

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/20 10:26

前提・実現したいこと

今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つスライドして
2
0+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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1>>> import numpy as np 2>>> from scipy import signal 3>>> a = np.arange(1, 101).reshape(10, 10) 4>>> a 5array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 6 [ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 7 [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 8 [ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], 9 [ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], 10 [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], 11 [ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70], 12 [ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80], 13 [ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], 14 [ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]]) 15>>> fil = np.array([[0,0,0],[0,1,0],[0,0,0]]) 16>>> fil 17array([[0, 0, 0], 18 [0, 1, 0], 19 [0, 0, 0]]) 20>>> signal.convolve2d(a, fil, mode="valid") 21array([[12, 13, 14, 15, 16, 17, 18, 19], 22 [22, 23, 24, 25, 26, 27, 28, 29], 23 [32, 33, 34, 35, 36, 37, 38, 39], 24 [42, 43, 44, 45, 46, 47, 48, 49], 25 [52, 53, 54, 55, 56, 57, 58, 59], 26 [62, 63, 64, 65, 66, 67, 68, 69], 27 [72, 73, 74, 75, 76, 77, 78, 79], 28 [82, 83, 84, 85, 86, 87, 88, 89]])

scipy.signal.convolve2d — SciPy v1.2.0 Reference Guide

投稿2018/12/20 12:26

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tubasa1995

2018/12/20 12:48 編集

まさに僕がこれからやりたいことです. 本当にありがとうございます. ただ一つ質問しても良いでしょうか. 例えば,最初の1~100までのような10行10列のcsvファイルを作って そこから読み込んで,同様のフィルター操作を行う際には, コードの最初あたりに with open('data2D.csv') as fp: lst = list(csv.reader(fp)) numbers = np.array(lst) と書けば,あとは回答者さんの通りに書けば同様の結果が得られるのでしょうか?
hayataka2049

2018/12/20 13:09

とりあえずちゃんとCSVデータになっていると仮定して、そうやって読み込むと文字列型になりますね。 numpy配列にしたいのなら np.loadtxt("data2D.csv", delimiter="適切な区切り文字") あたりでいけるかもしれません。 https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.loadtxt.html 私はサポートできないので、データ読み込みは自分の責任でやってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問