問題タブ [recarray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python numpy recarray:ポインター演算を使用してさまざまなフィールドのビューを取得できますか?
私は次の形式のnumpy構造化配列を持っています:
't'
ここで、またはのいずれかと'x'
連携するビューをこの配列に生成したいと思います'y'
。通常の構文では、コピーが作成されます。
2つのフィールドを選択することは「ファンシーインデックス」であり、その時点でnumpyはあきらめてコピーを作成するため、これは予想外のことではありません。私の実際の記録は大きいので、絶対にコピーを避けたいです。
numpyのストライドメモリモデル内で必要な要素にアクセスできないというのは、まったく真実ではありません。メモリ内の個々のバイトを見る:
必要な歩みを理解することができます:
明らかにv
、コピーを作成せずにメモリ内の正しい場所を指しています。残念ながら、numpyでは、これらのメモリ位置を元のデータ型として再解釈することはできません。
numpyをだましてこのキャストを実行させ、コピーを作成せずにとv_view
同等の配列を作成する方法はありますか?で行われているv_copy
ように、おそらく直接作業していますか?v.__array_interface__
np.lib.stride_tricks.as_strided()
python - Numpy Mean 構造化配列
学生 (文字列) とテストの点数 (整数) の構造化された配列があるとします。各エントリは、特定の学生が特定のテストで受け取った点数です。当然のことながら、各学生はこの配列に複数のエントリを持っています。
例
各生徒の平均点を簡単に計算するにはどうすればよいですか? つまり、「スコア」次元で配列の平均を取得するにはどうすればよいですか? やりたい
Numpy を返す
しかし Numpy は不平を言う
これを簡単に行う Numpy 風の方法はありますか? 構造化された配列を別の dtype で表示する必要があると思います。どんな助けでも大歓迎です。ありがとう。
編集
python - numpy 配列のインデックス datetime
私は大まかに次のようなnumpy配列を持っています:
最初の列に基づいて (つまり、datetime オブジェクトを使用して) データのインデックスを作成できるようにしたいので、次のような特定の年/月/日のデータにアクセスできます。
これは明らかに機能しません。私が考えることができる唯一のことは、追加の列(「年」列など)を追加することです。これでうまくいきます:
物事を行うにはかなり非効率的な方法のようです (そして、多くのデータを複製します) - 特に、他のすべての時間間隔にもインデックスを付けたい場合...これを行うためのより良い方法はありますか?
前もって感謝します。
python - numpyrecarrayで近い要素を見つける
rec配列の値に最も近いnumpy
レコード配列からすべての値を見つけようとしています(レコード配列の値の数は異なります)no1
no2
no1
フィールドがあるとしましょう:
('electrode', 'i4'), ('no_of_interest_time', 'i4'), ('time', 'f8')
ここで、time
は特定のイベントの時刻であり、no_of_interest_time
個別に分析する必要があるイベントのインデックスを作成します。各イベントにはそのような番号が付けられ、複数のイベントが同じ番号を共有する場合があります。electrode
イベントが記録された電極のインデックスを保持します(場所)。
no2
同じフィールドがありますが、異なるイベントを保持します。
recarrayの各イベントについて、同じタイプ()と場所( )のno2
recarrayから最も近いイベントを見つけたいと思います。no1
no_of_interest_time
electrode
forループを使用して解決する方法は次のようになりますが、もっとエレガントな解決策を探しています。
アドバイスをいただければ幸いです。前もって感謝します!!
python - numpy 構造化配列に階層を追加する
複数の名前付きフィールドを持つ既存の配列を取得し、元の dtype と等しい階層型 dtype を持つ 1 つのフィールドを持つ新しい配列を作成 (またはその場で変更) したいと考えています。あれは、
newarray['old']
~と形状および構造が同一であるようにoldarray
次に例を示します。
しかし、これは私にすべてゼロを与えます:
コピーを作成しようとすると、同じ問題が発生します。
また:なぜこれが起こっているのか誰か知っていますか?
python - 2つの再配列のnumpy.concatenateは転置された形状につながりますか?
同じ dtype で形状が異なる 2 つの numpy 配列 x1 と x2 があるとします。x1.dtype = dtype([('fmv', '<f4'), ('delta', '<f4'), ('rho', '<f4', (5,))])
x2.dtype = dtype([('fmv', '<f4'), ('delta', '<f4'), ('rho', '<f4', (5,))])
x1.shape = (10L, 1L)
x2.shape = (10L, 6L)
これらの 2 つの配列を軸 1 で連結したいと思います。
y = np.concatenate((x1,x2), axis=1)
この結果:
y.shape = (10L, 7L)
良い
y['rho'].shape = (5L, 10L, 7L)
悪い
フィールド rho の形状が転置されたのはなぜですか? 期待していた (10, 7, 5)
アップデート:
x1.strides = (28L, 28L)
x2.strides = (168L, 28L)
y.strides = (28L, 280L)
結果を複製するために実行できる小さなスクリプトを作成しました。
import numpy as np
x = np.zeros((5,3), dtype=np.dtype([('field1','<f8'),('field2','<f8',4)]))
A1 = np.concatenate((np.array(x[0,0], ndmin=1), np.ravel(x[:,1:], order='C')), axis=0)
B1 = np.concatenate((np.tile(np.array(A1[0],ndmin=2), (5,1)), np.reshape(A1[1:], (5,2), order='C')), axis=1)
A2 = np.ravel(x, order='C')
B2 = np.reshape(A2, (5,3), order='C')
B1['field2'].shape = (4L, 5L, 3L)
悪い
B2['field2'].shape = (5L, 3L, 4L)
良い
python - numpyレコードの配列をhstackする方法は?
[この投稿の以前のバージョンには、「numpyレコードの配列に1つの列を追加する方法」という不正確なタイトルがありました。その以前のタイトルで尋ねられた質問はすでに部分的に回答されていますが、この回答は、この投稿の以前のバージョンの本文が求めていたものではありません。区別を明確にするために、タイトルを書き直し、投稿を大幅に編集しました。また、前述の答えが私が探しているものに達していない理由についても説明します。]
2つのnumpy
配列x
とがありy
、それぞれがr個の「レコード」(別名「構造化」)配列で構成されているとします。x
be(r、c x)の形とy
be(r、c y )の形を考えてみましょう。x.dtype.names
また、との間に重複がないと仮定しましょうy.dtype.names
。
たとえば、r = 2、c x = 2、およびc y = 1の場合:
x
「水平方向に」連結して、形状(r、c x + c y )を持つレコードの新しいy
配列を生成したいと思います。この操作は変更しないでください。z
x
y
とは必ずしも一致しないz = np.hstack((x, y))
ため、通常は実行しません。たとえば、上記の例を続けます。dtype
x
y
今、私が探しているものに近い何かをするかもしれないように見える関数がありますが、私はそれから何も得ることができませんでした:私がそれで試したすべてはエラーで失敗するnumpy.lib.recfunctions.append_fields
か、私が取得しようとしているもの以外のものを生成します。
誰かが、上記の例で定義された、から、およびの水平連結に相当するレコードの新しい配列を生成するコード(または1を使用)を明示的に示して、またはを変更せずにそれを行うことができますか?n.l.r.append_fields
x
y
z
x
y
x
y
これには1行か2行のコードしか必要ないと思います。もちろん、ビルドz
、レコードごと、反復処理を必要x
としないコードを探していますy
。また、コードは、とが同じ数のレコードを持ち、との間に重複がないと想定する場合x
がy
ありx.dtype.names
ますy.dtype.names
。これ以外に、私が探しているコードはとについて何も知らないはずx
ですy
。理想的には、結合するアレイの数についても不可知論的である必要があります。IOW、エラーチェックを除いて、私が探しているコードはhstack_rec
、新しい配列z
が結果になるように関数の本体である可能性がありhstack_rec((x, y))
ます。
1 ...確かに、これまでの完璧な失敗の記録の後、この投稿の質問との関連性に関係なく、この関数をnumpy.lib.recfunctions.append_fields
どのように使用できるかについて少し興味がありました。
python - オブジェクト型の再配列列の dtype を変更します
すべての観測値に対して 2 つの列 (v3 と v7) が空白になっている csv ファイルがあります。
csv2rec 関数を使用して、これを python (epd-7.0-2) に読み込んでいます。
3 行目または 7 行目の値を拡張しようとすると、エラーが発生します (他の列では発生しません)。
RuntimeError: オブジェクト配列で setfield を呼び出せません
そのため、タイプを変更してみましたが、他のエラーが発生するだけでした:
追加の問題は、配列内の他の列も変更できないことです。
考え?ありがとう、