2017-03-27 8 views
0

私は、リスト形式でnumpy行列の列を抽出しようとしています。私は方法tolist()を使用しましたが、私の目的には役に立たないです。 コードを見てみましょう。numpy tolist()不快出力

import numpy as np 
def get_values(feature): 
    ''' 
    This method creates a lst of all values in a feature, without repetitions 
    :param feature: the feature of which we want to extract values 
    :return: lst of the values 
    ''' 
    values = [] 
    for i in feature: 
     if i not in values: 
      values.append(i) 
    return values 
lst=[1, 2, 4, 4, 6] 
a=get_values(lst) 
print(a) 
b=np.matrix('1 2; 3 4') 
col = b[:,0].tolist() 
print(col) 
if col == [1, 3]: 
    print('done!') 

あなたが見ることができるように、方法tolist()から返されたリストは、if文でOUTPUT

[1, 2, 4, 6] 
[[1], [3]] 

無視されます。今、if文を変更できない場合(何らかの理由で)、aのようにbのように管理するにはどうしたらいいですか?

+0

を働きます関数は大規模な 'フィーチャー'で恐ろしくスケールされます。 –

+0

恐ろしいことにどういう意味ですか?私はこの機能に問題はありませんでした – Bernheart

+1

@Well、その後、機能はあまり大きくありません。しかし、あなたのアルゴリズムは二次的な時間です。 'set'を使うと線形になります。あなたがそれを使用しているスケールでうまく動作する場合は、それを変更する必要はありません。しかしそれが二次的な時間であることに注意してください。 –

答えて

1

問題は、numpy.matrixのオブジェクトは常に2つの次元を維持するということです。その後、平ら、配列に変換します

>>> col = b[:,0].getA().flatten().tolist() 
>>> col 
[1, 3] 

それともただ...通常numpy.ndarray Sとは別に、あなたの `get_values`として

>>> a = b.getA() 
>>> a[:,0] 
array([1, 3]) 

対...

>>> b[:,0] 
matrix([[1], 
     [3]]) 
関連する問題