基于Numpy数组值(相同索引)选择列表项

2024-07-04 05:10:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我的方法行得通,但不知何故看起来很笨拙。我想知道有没有更好的方法

我有一个带有数据元组(baseDataList)的简单列表,一个处理该列表(calculate_results)的函数,用结果(resultData)生成numpy.ndarray。baseDataList和NumpyresultData的长度和索引匹配。现在我想返回并根据resultData的结果选择baseDataList的所有条目。如果resultData条目是<;0,则排除它,否则baseDataList的条目将基于resultData中的不同值进行分组

下面我通过创建一个新的列表,添加空值并在resultData中循环来解决这个问题。这不仅是笨拙的,我认为它还造成了数据开销,因为我现在有3个变量:baseDataListresultDataresultList,其中我只需要一个分组版本的baseDataList。关于如何改进这个有什么想法吗

    resultData, baseDataList = calculate_results(selection_value)         
    number_of_validResults = len(np.unique(resultData>=0))
    idx = 0
    resultList = [[] for x in range(number_of_validResults)] 
    for x in resultData:
        if x >= 0: # no resultData: x = -1
            resultList[x].append(baseDataList[idx])
        idx+=1

这是三个元素的输出示例:

print(str(type(baseDataList)))
print("baseDataList: ")
for s in baseDataList[:2]:
    print(*s

#<class 'list'>
#baseDataList:
#43.646556 -79.470988 5761688733 ...
#43.645314 -79.462791 5761688679 ...

print(str(type(resultData)))
print("resultData: ")
print(str(type(resultData)))
print("Unique: " + str(len(np.unique(resultData>=0)))

#<class 'numpy.ndarray'>
#resultData:
#[ 0 -1  0  5  5 -1  4 10 10  5 10 10 10 10 -1 10 10 10 10 10  4  4  6  1  2
#5  9 -1 10 10 10  6 10  8 10 10  6  8 10 10  3  9 10 10 10  6  6  4  6  6
#10  5  5  4  6 10  6  5 10  5 10 10 10  6 -1  6  4  4 10 10 10 10 10 10  7
#4 10 -1 -1 10  9 -1  5  3  6  6  6  6  6  6  6  4  6  6  4  6  6  6  6  6
#6  6  6  6  6  8 -1  6 10 10  4  4 10  9 -1  9 10 10  5  9 10  4  5  5 10
#6 10 10  5 10  6  5  6 10 10 10 10 10 10 10 10 10  6  4  5 10 -1  9  9  9
#6 10 10  6  1  6 10 10 10 10 10 10  6  5  9 10 10  6 10 10 10 -1  4  3  9
#9  7  5 10 10 10  4  8 -1 -1  6  4  4  6 10  9  6 10  9 10  1  6 10 10 10
#10 -1  6 10 10  9 10 10  2 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
#10 10 10 10 10 -1  1 10 10  1  1 10 10  1 -1 10  1 10 10 10 10 10 10  9 10
#11 11 -1  6  1  6 -1 10  6  4  8 10 10 10 10  8 10 10 10 10 10 11  6 12 12
#10  4 10 10  6  4 -1  4 -1  4  4  4  4  4  4  4 -1  4]
#Unique: 13

print("resultList: ")
print(str(type(resultList)))
for s in resultList[:2]:
    print(*s)
#<class 'list'>    
#resultList:
#namedResult_tuple(lat=43.646556, lng=79.470988, guid='5761688733', ...)
#namedResult_tuple(lat=43.645314, lng=-79.462791, guid='5761688679', ...)
#...

Tags: 数据方法in列表fortype条目class

热门问题