5

0 と 1 の NumPy r by 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 に答える