2016-03-26 6 views
0

のpython3、numpy1.10numpyの:column_stack後の保存DTYPE()

は、私はその後bool_array[False, False, False]boolタイプになりますsome_array = ['a', 'b', 'c'] bool_array = numpy.array([False for x in range(len(parts_array))], dtype='bool_')

よう

何かを持っている、のは、言ってみましょう。

another_array = numpy.column_stack((some_array, bool_array))の場合、両方のタイプがstrになります。これは望ましくありません。 私が望むのは、boolタイプを第2列に保存しています。です。私は最初の列の種類については気にしません。

別の配列を作成する必要がありますか?ソリューションのようにのようなdtypeを渡すことですが、私はcolumn_stack()によって生成された全体の配列をコピーしないと思います。

答えて

0

1つのnumpy配列で複数のデータ型を持つことはできません。あなたはこれが

1 
a False 
b False 
c False 

bool_arrayは維持されますように好きになるデータフレーム

df=pd.DataFrame(bool_array, index=some_array.tolist(), columns=[1]) 

を定義することができます

some_array=['a','b','c'] 
    bool_array=[False, False, Fale] 

を持っていれば、例えばパンダデータフレームをしようとする場合があり、そのデータフレーム操作を使用してアクセスして操作する必要があります

0

2(メイン)構造化配列に値を追加する方法 - タプルのリストを使用するか、値を各フィールドにコピーする。

In [368]: arr=np.zeros((3,),dtype='S10,bool') 
In [369]: arr 
Out[369]: 
array([(b'', False), (b'', False), (b'', False)], 
     dtype=[('f0', 'S10'), ('f1', '?')]) 
In [371]: arr['f0']=['one','two','three'] 
In [372]: arr['f1']=[True,False,True] 
In [373]: arr 
Out[373]: 
array([(b'one', True), (b'two', False), (b'three', True)], 
     dtype=[('f0', 'S10'), ('f1', '?')]) 

あなたがサブリストのリストを持っている場合、あなたはタプルにサブリストを変換する必要があります:フィールドによって

In [378]: alist=[['one',True],['two',False],['three',True]] 
In [379]: np.array([tuple(i) for i in alist], dtype=arr.dtype) 
Out[379]: 
array([(b'one', True), (b'two', False), (b'three', True)], 
     dtype=[('f0', 'S10'), ('f1', '?')]) 

それは持っているので、column_stackは、中間配列として役立つことはありません元の列dtypesを失った。

from numpy.lib import recfunctionsの機能を検索することもできます。そのモジュールには、配列をマージする関数があります。しかし、私が見ているものはフィールドコピーメソッドを使用するので、時間を節約することはできません。

In [381]: recfunctions.merge_arrays([['one','two','three'],[False,True,False]]) 
Out[381]: 
array([('one', False), ('two', True), ('three', False)], 
     dtype=[('f0', '<U5'), ('f1', '?')]) 
+0

私は現在、 'recarray'を介してこれをリメイクしました:'配列= np.rec.fromarrays((some_array、bool_array)、名=( 'キー'、 'tf_value')) '。そして、両方のタイプが保持されます。そして、通常の「ndarray」のように働く。それともそうではありませんか?私は 'ndarray'と' recarray'の違いを発見していません。 – light2yellow

+0

私はそれらをあまり使用していませんが、 'recarray'が変更された' __getattribute__'メソッドを持つサブクラスであることが分かります。 'fromarrays'は、私が概説したフィールドによるコピーを使用します(コードを見てください)。 – hpaulj

関連する問題