将行值映射到同一numpy数组中的其他值

时间:2019-10-25 08:33:18

标签: python arrays numpy

如果我有一个带有如下对象的numpy数组:

array(['Ana', 'Charlie', 'Andrew'], dtype=object)

我想将每个对象映射到数组中的所有对象,以便获得以下输出:

array(['Ana', 'Ana'],['Ana','Charlie'],['Ana', 'Andrew'], 
['Charlie','ana'], ['Charlie','Charlie'],['Charlie','Andrew'], ['Andrew','ana'],['Andrew', 'Charlie'], ['Andrew','Andrew'], dtype=object).

如何使用numpy将每个对象映射到同一数组中的所有对象?

非常感谢。

3 个答案:

答案 0 :(得分:1)

您要搜索两个数组的笛卡尔积。

numpy.transpose()应该可以解决问题:

x = array(['Ana', 'Charlie', 'Andrew'], dtype=object)
numpy.transpose([numpy.tile(x, len(x)), numpy.repeat(x, len(x))])

答案 1 :(得分:1)

Python列表通常更适合处理字符串。看起来您想要笛卡尔积:

from itertools import product
l = ['Ana', 'Charlie', 'Andrew']

list(map(list, product(l,l)))

[['Ana', 'Ana'],
 ['Ana', 'Charlie'],
 ['Ana', 'Andrew'],
 ['Charlie', 'Ana'],
 ['Charlie', 'Charlie'],
 ['Charlie', 'Andrew'],
 ['Andrew', 'Ana'],
 ['Andrew', 'Charlie'],
 ['Andrew', 'Andrew']]

答案 2 :(得分:0)

以下利用列表理解的代码应该可以正常工作。

import numpy as np
a=np.array(['Ana', 'Charlie', 'Andrew'], dtype=object)
b=np.array([[i,j] for i in a for j in a], dtype=object)