2017-12-15 9 views
0

NumPyデータセット(つまりndarray)に関連する属性を保存する方法が必要ですはデータセット自体の内容を変更しません。もちろん、その情報はテーブル自体のセルに格納することはできません。私はflagsを見てみましたが、明らかに "配列フラグは任意に設定できません"。物事を明確にするために、わかりやすい例を挙げましょう。データセットが何らかの方法で「クリーン」されている「パイプライン」を通過しているとします。今度は、このデータセットをマークするフラグタイプのものを "cleaned"して、マークされたマークされたものに対してクリーニング操作が繰り返されず、マークされていないものに対してのみ実行されるようにします。この情報を表のセルに書き込まないと、どうすればこのようなことができますか? (この例を文字通り解釈しないでください。私の主張を実証するための唯一の実例です)任意の情報を格納するnumpyフラグはありますか?

EDIT:理想的には、読み書き時間に "大幅に"影響を与えないとできます。 ndarray

+0

あなたがコードでデータセットのコピーを保存するために望んでいますか?どの制御/技術を使用しているのでしょうか、おそらくコード例を投稿してください。たとえば、winformコントロールに任意の情報を格納する一般的な場所は、タグ – chrispepper1989

+0

です。それはナンシーです。それが技術の意味ですか?さらに、ビューとコピーの両方を処理する柔軟性が必要です。 – chainD

+0

ああ申し訳ありませんが何らかの理由でC#の質問を探していましたが、大文字を使わずにnumpyを認識できませんでした。それがデータセットの内部に格納されなければならない特定の理由はありますか?データセットと余分なデータを単一のクラスに格納するのが最善ではないでしょうか? – chrispepper1989

答えて

3

dtypeに隠すことができます。例:V0別名Vは、「ゼロバイトの無効データ」を意味

arr = np.arange(6).reshape(3,2) 
arr.dtype = [('value', int), ('here is a pile of extra data', 'V0')] 

私たちがやったことはint型から[int, 'V']にDTYPEを変更することで、したがって、dtypeの余分な部分はスペースをとらないで、名前は任意の文字列にすることができます。そして、そのような列を複数持つことができます。

arr['value'] 

をまたは::

今、あなたはこのように、元のデータを取得することができます

arr = arr.view(np.recarray) # enable attribute access 
arr.value 

あなたは複合dtypesに慣れていない場合、彼らはnumpyのは、「構造化された配列と呼ぶものに使用されています"時には"再配列 "します。

だけで余分な文字列を取得するには:

arr.dtype.names[1:] 

はあなたを与える:

('here is a pile of extra data',) 
+0

ありがとう答えがたくさんあります - これは本当にすっきりした回避策です!私が使用するケースの唯一のニックピックは、明らかに「大幅に」読み込み時間を増やすことです(そして、おそらく私は「速い」解決策を要求しなかったので私の質問でこれを述べるべきです)。簡単な例として、投稿からのarr(およびarr2は同じ配列ですが、コンパウンドdtypeなし)を使用しています:%timeit arr ["value"] ループあたり111 ns±0.234 ns(平均±標準偏差。7回、10000000ループ) %timeit arr2 ループ当たり平均19.9 ns±0.106 ns(平均±標準偏差7回、10000000回のループ) – chainD

+0

これには方法があると思いますか? – chainD

+1

@chainD:特にアレイのサイズに応じて拡張されないため、余分なナノ秒の90倍は大幅に増加しません。どちらのタイミングでもアレイのデータを実際に読み取っているわけではありません。 – user2357112

関連する問題