4

MatlabからPythonに移行しているので、Pythonはまだ初めてです。データ分析用の基本的なコードを作成しようとしています。指定されたディレクトリ内のすべての.txtデータファイルを読み取り、実際の.txtファイルの名前でラベル付けする必要があります。辞書を使ってこれを機能させる方法を見つけることができましたが、もっと良い方法があれば、それを聞いてとても感謝しています。

データにアクセスできるようになったら、そのデータの操作されたバージョンで新しいリストを作成したいと思います。これを行うには、新しいnxmリストまたは配列を作成したいのですが、そのようなリストを正しく初期化する方法が見つかりません。私の最新の取り組みの結果、次のエラーが発生します。

リストインデックスはタプルではなく整数である必要があります

コードは次のとおりです。

import sys
import os
import re
import string
from numpy import *

listing = os.listdir(path)
dic = {}    # define a dictionary to map the datafiles to while maintaining their filename

for filename in listing:
        match = re.findall(r'[\w.]+\.txt', filename)    # Use a regular expression findall function to identify all .txt files
        if match:
            dic[match.pop()[:-4]] = loadtxt(filename)   # Drop the .txt and assign the datafile its original name

E = []
E[:,0] = dic['Test_Efield_100GHz'][:,0]
E[:,1] = dic['Test_Efield_100GHz'][:,1]
E[:,2] = abs(dic['Test_Efield_100GHz'][:,4]+dic['Test_Efield_100GHz'][:,7]*1j)**2
E[:,3] = abs(dic['Test_Efield_100GHz'][:,5]+dic['Test_Efield_100GHz'][:,8]*1j)**2
E[:,4] = abs(dic['Test_Efield_100GHz'][:,6]+dic['Test_Efield_100GHz'][:,9]*1j)**2

フィードバックをありがとう!

4

2 に答える 2

3

numpy標準の Pythonlist型 ( your E) 変数で、ライブラリのみがサポートする拡張スライス構文を使用しています。

E.append()代わりに、新しい値を追加するために使用する必要があります。

E.append(dic['Test_Efield_100GHz'][:,0])

または、単にリスト全体を一連の式として定義します。

E = [
    dic['Test_Efield_100GHz'][:,0]
    dic['Test_Efield_100GHz'][:,1]
    abs(dic['Test_Efield_100GHz'][:,4]+dic['Test_Efield_100GHz'][:,7]*1j)**2
    abs(dic['Test_Efield_100GHz'][:,5]+dic['Test_Efield_100GHz'][:,8]*1j)**2
    abs(dic['Test_Efield_100GHz'][:,6]+dic['Test_Efield_100GHz'][:,9]*1j)**2
]

またはnumpy代わりに配列を使用します。

、などの標準の Python シーケンス タイプはstr、単純なインデックス付けのみをサポートします。listtuple

E[0]
E[-2]

またはプレーンスライス:

E[:10]
E[1:2]
E[3:]
E[:-1]
于 2012-11-15T17:10:14.400 に答える
0

1 つの配列に指定できるインデックスは 1 つだけです。
このようなものを使用します
E.append(dic['Test_Efield_100GHz'][0])
これは E[0] を配列として格納し、その値は E[0][i] によってアクセスできます。ここで、i は列名です
注: Python には行列型のデータ構造がなく、配列のみがあります。 Matrix は単なる配列の配列です。

于 2012-11-15T17:13:48.030 に答える