2012-04-21 24 views
1

私はfloat型のm * n numpy行列を持っています。私は、(コレクションからの)Counter関数を使用して、行列要素の特定の組み合わせの数を導き出すつもりです。実験では、Counter()が文字列値の入力を必要とすることがわかりましたが、numpyの行列はデフォルトでfloat型でした。Pythonの文字列にnumpy行列を型キャストする

numpy行列の0を宣言しているときにdtypeを使用しても問題ありません。

私はnumpymatrixの各要素を文字列に変換することを考えました。しかし、それは動作していません。どうすればいいのですか?

答えて

1
xx = np.matrix([[1.2,3.4],[5.4,6.7],[9.8, 5.2]]) 
zz = np.matrix([[str(ele) for ele in a] for a in np.array(xx)]) 

結果:

>>> xx 
matrix([[ 1.2, 3.4], 
     [ 5.4, 6.7], 
     [ 9.8, 5.2]]) 
>>> zz 
matrix([['1.2', '3.4'], 
     ['5.4', '6.7'], 
     ['9.8', '5.2']], 
     dtype='|S3') 
1

正確には何をしようとしているのか不明ですが、numpyの配列に基づいてカウントを派生させるには、np.histogram(またはおそらくnp.bincount)を使用するほうが適しています。

しかし、あなたがしなければならない場合:

In [45]: a = np.random.normal(size=(3,3)) 

In [46]: a 
Out[46]: 
array([[ 0.64552723, -0.4329958 , -1.84342512], 
     [ 0.83197804, -0.03053034, 0.22560254], 
     [ 0.61356459, -1.60778048, -1.51859134]]) 

In [47]: a.astype('|S8') 
Out[47]: 
array([['0.645527', '-0.43299', '-1.84342'], 
     ['0.831978', '-0.03053', '0.225602'], 
     ['0.613564', '-1.60778', '-1.51859']], 
     dtype='|S8') 
関連する問題