2

を使用して 3 列を読み取ろうとしてnumpy.loadtextいますが、エラーが発生しています。

ValueError: setting an array element with sequence.

データのサンプル:

0.5     0   -22
0.5     0   -21
0.5     0   -22
0.5     0   -21

列 1は、距離ごとに 15 のデータ サンプルで 0.5 から 6.5 まで増加する距離です。

列 2は角度で、距離が 0.5 に戻るたびに 45 度増加します。

列 3には測定対象のデータ (RSSI) が含まれており、約 -20 から -70 に減少します。

次のコードを使用して、3 つの列を別々の配列にロードしようとしています。

import numpy as np

r, theta, RSSI, null = np.loadtxt("bot1.txt", unpack=True)

3D各距離/角度の組み合わせでサンプリングされた RSSI を平均化し、データを極座標プロットとしてプロットしたいと考えています。まだここまでたどり着けませんが。

なぜ機能しないのかについて何か考えnp.loadtxtはありますか?

4

1 に答える 1

5

3 つの列を 4 つの変数にアンパックしているという事実を超えて、問題はないと思います。実際、これは私の NumPy 1.6.2 で動作します。

r, theta, RSSI = np.loadtxt("bot1.txt", unpack=True)  # 3 columns => 3 variables

他の何かが問題を引き起こしているかどうかを確認するために、純粋な Python で同じことを行うこともできます (ファイル内のエラーなど)。

import numpy

def loadtxt_unpack(file_name):
    '''
    Reads a file with exactly three numerical (real-valued) columns.
    Returns each column independently.  
    Lines with only spaces (or empty lines) are skipped.
    '''

    all_elmts = []

    with open(file_name) as input_file:
        for line in input_file:

            if line.isspace():  # Empty lines are skipped (there can be some at the end, etc.)
                continue

            try:
                values = map(float, line.split())
            except:
                print "Error at line:"
                print line
                raise

            assert len(values) == 3, "Wrong number of values in line: {}".format(line)

            all_elmts.append(values)

    return numpy.array(all_elmts).T

r, theta, RSSI = loadtxt_unpack('bot1.txt')

ファイルに問題がある場合 (空でない行が 3 つの float として解釈できない場合)、問題のある行が出力され、例外が発生します。

于 2013-03-19T00:59:53.477 に答える