5

我有一个由零和一组成的 NumPy r x c 矩阵。我有一个 c 单词的列表。我想返回一个长度为 r 的列表,其中每个元素都是一个空格分隔的字符串,仅由与该矩阵行中的 1 匹配的单词组成。这是一个例子:

matrix=np.array([[0,0,1],[1,0,1],[0,1,1]])
words=['python','c++','.net']

output=[]
for row in range(matrix.shape[0]):
    output.append( ' '.join([words[i]  for i in range(matrix.shape[1]) if matrix[row,i]==1]))

什么是 Pythonic 方式来实现这一点?

谢谢,

G

4

2 回答 2

3

看哪:

>>> [' '.join(word for include_word, word in zip(row, words) if include_word) 
     for row in matrix]
['.net', 'python .net', 'c++ .net']

这是一个有趣的=)。

于 2013-11-12T17:03:52.187 回答
0

这不像使用迭代器/生成器的本机 python 解决方案那样内存友好,但也许它是 numpythonic ......

matrix=np.array([[0,0,1],[1,0,1],[0,1,1]], dtype=bool)
wordsArray=numpy.array(['python','c++','.net'])

output = [' '.join(wordsArray[elem]) for elem in matrix]
于 2013-11-12T17:10:07.803 回答