我正在尝试从 2D numpy 数组中获取一维切片,但出了点问题

I am trying to take an 1D slice from 2D numpy array, but something goes wrong

我正在尝试使用 3-sigma 规则从我的数据中过滤明显的测量错误。 x 是一个 numpy 测量点数组,y 是一个测量值数组。为了从我的数据中删除错误的点,我压缩了 x.tolist() 和 y.tolist(),然后按每个元组的第二个元素进行过滤,然后我需要将我的 zip 转换回两个列表。我试图首先将我的元组列表转换为列表列表,然后将其转换为 numpy 二维数组,然后取两个一维切片。看起来第一个切片是正确的,但随后输出如下:

x = np.array(list(map(list, list(filter(flt, list(zap))))))[:, 0]

IndexError: too many indices for array   

我不明白我做错了什么。这是代码:


x = np.array(readCol(0, l))
y = np.array(readCol(1, l))
n = len(y)

stdev = np.std(y)
mean = np.mean(y)

print("Stdev is: " + str(stdev))
print("Mean is: " + str(mean))

def flt(n):
    global mean
    global stdev
    global x
    if abs(n[1] - mean) < 3*stdev:
        return True
    else:
        print('flt function finds an error: ' + str(n[1]))
        return False


def filtration(N):
    print(Fore.RED + 'Filtration function launched')
    global y
    global x
    global stdev
    global mean
    zap = zip(x.tolist(), y.tolist())
    for i in range(N):
        print(Fore.RED + ' Filtration step number ' + str(i) + Style.RESET_ALL)
        y = np.array(list(map(list, list(filter(flt, list(zap))))))[:, 1]
        print(Back.GREEN + 'This is y: \n' + Style.RESET_ALL)
        print(y)
        x = np.array(list(map(list, list(filter(flt, list(zap))))))[:, 0]
        print(Back.GREEN + 'This is x: \n' + Style.RESET_ALL)
        print(x)
        print('filtration fuction main step')
        stdev = np.std(y)
        print('second step')
        mean = np.mean(y)
        print('third step')

你试过一步步测试问题线吗?

x = np.array(list(map(list, list(filter(flt, list(zap))))))[:, 0]

例如:

temp = np.array(list(map(list, list(filter(flt, list(zap))))))
print(temp.shape, temp.dtype)
x = temp[:, 0]

可能需要进一步分解,但由于 [:,0] 是这一行中唯一的索引操作,我将从这里开始。

如果不进一步研究代码 and/or 一些示例,我不会尝试推测嵌套 lists 在做什么。

错误听起来像 temp 不是 2d,这与您的预期相反。这可能是因为 temp 是对象数据类型,并且由长度不同的列表组成。当人们从下载的数据库中创建数组时,这似乎是一个常见问题。