最佳地从numpy数组中检索大于阈值的值

Retrieve value larger than a threshold value from numpy array optimally

我正在使用 python 3.x。我有一个形状为 (29982,29982) 的 numpy 数组和一个形状为 29982 的列表。样本数组看起来像

array([[1,5,7,2,9...],
       [2,6,4,1,5...],
       [7,9,1,12,4...],
       ...
       ...
       [6,8,13,2,4...]])

示例列表看起来像

['John','David','Josua',......,'Martin']

我想得到一个 pandas 数据框组合这个数组和列表,这样数组值应该大于 5。数据框应该看起来像

        'John'  'David'   'Josua'
'John'    0       0         7
'David'   0       6         0
'Josua'   7       9         0
....
'Martin'  6       8         13

你能建议我该怎么做吗?

只需使用 pd.DataFrame 从数组创建数据框,将您的列表作为 indexcolumns 传递。然后使用 df.where 只保留大于 5 的值:

arr = [...]
lst = ['John','David','Josua',...,'Martin']

df = pd.DataFrame(arr, index=lst, columns=lst)
df = df.where(df > 5, 0)

你可以尝试numpy.ma.masked_where在numpy数组上处理

arr = np.array([[1,5,7,2,],
                [2,6,4,1,],
                [7,9,1,12],
                [6,8,13,2]])

lst = ['John','David','Josua', 'Martin']

df = pd.DataFrame(np.ma.masked_where(arr<=5, arr).filled(0), index=lst, columns=lst)
print(df)

        John  David  Josua  Martin
John       0      0      7       0
David      0      6      0       0
Josua      7      9      0      12
Martin     6      8     13       0