我正在尝试从 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
是对象数据类型,并且由长度不同的列表组成。当人们从下载的数据库中创建数组时,这似乎是一个常见问题。
我正在尝试使用 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
是对象数据类型,并且由长度不同的列表组成。当人们从下载的数据库中创建数组时,这似乎是一个常见问题。