我在使用python numpy.std()作为嵌套列表筛选不相关数据时遇到问题?

我在使用python numpy.std()作为嵌套列表筛选不相关数据时遇到问题?,python,numpy,Python,Numpy,我有一个包含许多不同变体的传入列表: [(float)Width, (float)Height, aspect ratio, unique name] [(float)Width, (float)Height, aspect ratio, unique name] 我试图找出如何首先运行标准偏差,使用宽度和高度过滤掉面积,然后重新运行另一个级别,并使用纵横比过滤掉。最后,我计划生成宽度和高度的平均值[np.mean(w_h,axis=0)]。我看到我将需要分离列表,但我想确保如果它超出预期值,

我有一个包含许多不同变体的传入列表:

[(float)Width, (float)Height, aspect ratio, unique name]
[(float)Width, (float)Height, aspect ratio, unique name]
我试图找出如何首先运行标准偏差,使用宽度和高度过滤掉面积,然后重新运行另一个级别,并使用纵横比过滤掉。最后,我计划生成宽度和高度的平均值[np.mean(w_h,axis=0)]。我看到我将需要分离列表,但我想确保如果它超出预期值,我可以在下次运行时删除它。有谁能给我一些建议,让它发挥作用吗


我试着用axis=0运行它,就像其他np操作一样,但没有成功。运行它通常会有问题,因为唯一名称是字符串而不是浮点。但是仅仅获取3个值也是没有意义的,因为我不想比较列表中的数字,我想垂直比较数字,但如果不符合参数,还可以删除整行。

我找到了!!最后,我创建了两个不同的函数,一个函数执行标准偏差,并返回特定索引中符合两个标准偏差的值列表

import NumPy as np
import statistics

def std_filter(list, idx):  # [[number,number,number], [number, number,number]...]
idx_pool = []
float_idx_pool = np.array(idx_pool, dtype=np.float32)

for element in list:
    item = element[idx]
    if isinstance(item, str) == True:
        print("item in element must be an int or float")
        break
    idx_pool.append(item)
float_idx_pool = np.append(float_idx_pool, idx_pool)

standard_deviation = statistics.stdev(idx_pool)
element_mean = [np.mean(float_idx_pool, axis=0)]

final_list = [x for x in idx_pool if (x > np.subtract(element_mean, 2 * standard_deviation))]
final_list = [x for x in final_list if (x < np.add(element_mean, 2 * standard_deviation))]

return final_list

如果有人能想出更好的方法,请告诉我。

到目前为止,我一直在尝试分别指定标准偏差和平均值,并生成标准偏差范围内的值列表,但是现在,如果这个特定IDX的值与原始列表不匹配,我将尝试删除原始列表中的元素。这似乎比它应该是什么更复杂,我想知道是否已经有一个预设的方式做这件事。
def remove_nested_with_idx(List_main, List_keep, list_main_idx):
# function sistructive, making sure to copy
list_to_modify = List_main.copy()
# runs through each element in specific idx and compares it to specific list
for elem_in_list in List_main:
    item = elem_in_list[list_main_idx]
    # checks item to see if value is in List_keep
    if item not in List_keep:
        list_to_modify.remove(elem_in_list)
return list_to_modify