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 列是从 0.5 增加到 6.5 的距离,每个距离有 15 个数据样本。

第 2 列是一个角度,每次距离返回 0.5 时增加 45 度。

第 3 列包含正在测量的数据(RSSI),它从大约 -20 减少到 -70。

我正在使用以下代码尝试将三列加载到单独的数组中:

import numpy as np

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

我将在每个距离/角度组合处对采样的 RSSI 进行平均,然后我希望将数据绘制为3D极坐标图。不过,我还没有走到这一步。

np.loadtxt关于为什么不起作用的任何想法?

4

1 回答 1

5

除了您将 3 列解压缩为四个变量这一事实之外,我认为没有任何问题。事实上,这适用于我的 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')

如果文件出现问题(如果非空行不能解释为三个浮点数),则会打印有问题的行并引发异常。

于 2013-03-19T00:59:53.477 回答