将两个列表逐元素连接到 n x n 矩阵

Concatenate two lists elementwise to an n x n matrix

我有两个包含字符串的列表,我想将它们按元素连接成一个 n x n 矩阵。我试过下面的代码,但这只给了我 n x 1 个列表。

row = ['a','b','c']
col = ['a','b','c']

matrix = map(''.join, zip(row,col))

预期的输出将是这样的矩阵:

[['aa','ab','ac'],
 ['ba','bb','bc'],
 ['ca','cb','cc']])

是否有使用常规 python 或 numpy 来实现此目的的解决方案?

常规 Python - 使用字符串连接和列表理解:

matrix = [[x + y for x in row] for y in col]

要符合 NumPy 样式和所需的输出,请使用:

np.c_[matrix].T

为了精确的期望输出

row = ['a','b','c']
col = ['a','b','c']


result = [[y + x for x in row] for y in col]
print(result)

如果你真的想使用 NumPy,你可以利用 meshgrid 来做这样的事情:

row_mat, col_mat = numpy.meshgrid(row, col)
concat_mat = numpy.core.defchararray.add(col_mat, row_mat)

对于 numpy 方法:

import itertools
np.array([''.join(i) for i in list(itertools.product(row,col))]).reshape(3,3)                                                                                                       

# array([['aa', 'ab', 'ac'],
#       ['ba', 'bb', 'bc'],
#       ['ca', 'cb', 'cc']], dtype='<U2')

这里是 numpy 一个班轮:

np.add.outer(row,col,dtype="O")
# array([['aa', 'ab', 'ac'],
#        ['ba', 'bb', 'bc'],
#        ['ca', 'cb', 'cc']], dtype=object)

利用 + 对 python 字符串的定义(不是 numpy 字符串数据类型):

In [140]: row=np.array(['a','b','c'],object)                                    
In [141]: row[:,None]+row                                                       
Out[141]: 
array([['aa', 'ab', 'ac'],
       ['ba', 'bb', 'bc'],
       ['ca', 'cb', 'cc']], dtype=object)