我有一个置换矩阵,它是一个方矩阵,元素为1或0。
p = [[1, 0, 0, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[0, 0, 0, 1]]
如果我将p
乘以int
的列表,则列表中元素的位置将被更改。例如
a_num = [1, 3, 2, 4]
np.dot(np.array(p), np.array(a_num).reshape(4,1))
# results is [1, 2, 3, 4]
现在我要更改str
的列表:
a_str = ['c1', 'c3', 'c2', 'c4']
到
['c1', 'c2', 'c3', 'c4']
您知道如何使用矩阵p
来实现吗?请注意,我的实际应用程序可以在列表中包含数十个元素。
供您参考。有一篇关于 How to generate permutation matrix based on two lists of str
答案 0 :(得分:2)
您可以使用 +-------+-------------+-------------+-----------+
1 | Company | Invoice # | Employee | Hours |
+=======+============+============+============+
2 | A | 12345 | Employee 1 | 10 |
3 | A | 12345 | Employee 2 | 2 |
4 | A | 23456 | Employee 1 | 8 |
5 | A | 23456 | Employee 2 | 3 |
:
numpy.take
答案 1 :(得分:1)
通过利用列表理解中的枚举,您可以不使用numpy来实现:
p = [[1, 0, 0, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[0, 0, 0, 1]]
a_str = ['c1', 'c3', 'c2', 'c4']
b_str = [a_str[idx] for row in p for idx,i in enumerate(row) if i == 1]
print(b_str)
输出:
['c1', 'c2', 'c3', 'c4']
它获取p
的每个内部列表,并在该内部列表的a_str
处使用idx
的元素,即一个,从而创建一个新列表。