Python中的元素排列

Python中的元素排列,python,numpy,Python,Numpy,数组“data”的每个元素都必须按如下方式更改: dats = data.ravel() results = [] for d in dats: nam_A = names_A[data_A == int(d)] dat_B = data_B[names_B == nam_A] results.append(dat_B) print np.array(results).reshape(data.shape) [[51 51 51 51 51 51 51 51 51

数组“data”的每个元素都必须按如下方式更改:

dats = data.ravel()

results = []
for d in dats:
    nam_A = names_A[data_A == int(d)]
    dat_B = data_B[names_B == nam_A]
    results.append(dat_B)

print np.array(results).reshape(data.shape)


[[51 51 51 51 51 51 51 51 51 51]
 [51 51 51 51 51 51 51 51 51 51]
 [51 51 51 51 51 51 51 51 51 51]]
比如说,, 4应出现在名称和数据中。 4的名字是“大卫”。 现在“大卫”应该出现在名字和数据中。 “大卫”的数据是30。 因此,元件4必须改变30;等等

import numpy as np

names_A = ['David', 'Mark', 'Brian', 'Michael']
data_A = [4,3,1,2]

names_B = ['Mark', 'David', 'Michael', 'Brian']
data_B = [51,30,11,29]

data = np.array([[4,4,3,3,2,2,1,1,3,3],
                [4,3,3,3,2,2,3,1,3,1],
                [4,2,3,3,2,2,4,1,4,3]])
最简单和最简单的方法是什么

我试过的方法如下:

dats = data.ravel()

results = []
for d in dats:
    nam_A = names_A[data_A == int(d)]
    dat_B = data_B[names_B == nam_A]
    results.append(dat_B)

print np.array(results).reshape(data.shape)


[[51 51 51 51 51 51 51 51 51 51]
 [51 51 51 51 51 51 51 51 51 51]
 [51 51 51 51 51 51 51 51 51 51]]

但是,它给出了错误的结果。您将如何操作?

使用字典创建映射

names_A = ['David', 'Mark', 'Brian', 'Michael']
data_A = [4,3,1,2]

names_B = ['Mark', 'David', 'Michael', 'Brian']
data_B = [51,30,11,29]

lookup_a = dict(zip(names_A, data_A))
lookup_b = dict(zip(names_B, data_B))

mapping = {value_a: lookup_b[key_a] for key_a, value_a in lookup_a.items()}
现在,
mapping
中的键将是
data\u A
中的数字以及
data\u B
中的相应值

我从来没有使用过
numpy
,但现在更换看起来很容易


仅举一个简单列表的示例:

data = [4, 4, 3, 3, 2, 2, 1, 1, 3, 3]
data = [mapping[value] for value in data]
数据
现在是
[30,30,51,51,11,11,29,29,51,51]


安装numpy后编辑

如果创建了映射词典,则可以执行以下操作:

data = np.array([[4, 4, 3, 3, 2, 2, 1, 1, 3, 3],
                 [4, 3, 3, 3, 2, 2, 3, 1, 3, 1],
                 [4, 2, 3, 3, 2, 2, 4, 1, 4, 3]])

for row in data:
    for index, value in enumerate(row):
        row[index] = mapping[value]
数据现在是:

[[32 30 51 51 11 11 29 29 51 51]
 [30 51 51 51 11 11 51 29 51 29]
 [30 11 51 51 11 11 30 29 30 51]]

因为我以前从未使用过numpy,所以可能会有更简单(或更具pythonic)的解决方案,但至少这是它应该做的。

是的,这是一个很好的解决方案,但是,我不太熟悉字典,尤其是您创建的映射。所以,尽管我已经接受了你的解决方案,你能在我编辑的问题中检查我的代码吗..就像我说的,我不知道
numpy
,但是你的解决方案看起来很奇怪(又称错误)。如果你不知道什么是字典,可以看看字典。这是每个Python程序员必须知道的基本数据结构之一我现在是AFK,但如果没有其他人回答这个问题,我可能会在以后安装numpy并向您显示详细信息。