構造化配列の項目には、項目名でアクセスします。これを回避する方法はありません。 dtypesが別の方法でそれを見ることができない限り。
希望の出力をc
としましょう。
In [1062]: b['fd'][:,0]
Out[1062]: array([ 11., 41., 71.])
In [1064]: c['fd']
Out[1064]:
array([[ 11.],
[ 41.],
[ 71.]])
私はちょうどrecfunctions
は、一般に、標的配列を割り当てると、フィールドで値をコピーhttps://stackoverflow.com/a/38090370/901925で説明したように:私はあなたがやろうとしていると思う何
In [1061]: b['fd']
Out[1061]:
array([[ 1.10000000e+01, 2.10000000e+01, 3.10000000e+01,
1.00000000e-02],
[ 4.10000000e+01, 5.10000000e+01, 6.10000000e+01,
1.10000000e-01],
[ 7.10000000e+01, 8.10000000e+01, 9.10000000e+01,
2.10000000e-01]])
は、両方のフィールドにこれらの値を収集しています。
だから、フィールド反復ソリューションは、のようになります。両方のフィールド山車以来
In [1066]: c.dtype
Out[1066]: dtype([('fd', '<f8', (1,)), ('av', '<f8', (1,))])
In [1067]: b.dtype
Out[1067]: dtype([('fd', '<f8', (4,)), ('av', '<f8', (4,))])
In [1068]: d=np.zeros((b.shape), dtype=c.dtype)
In [1070]: for n in b.dtype.names:
d[n][:] = b[n][:,[0]]
In [1071]: d
Out[1071]:
array([([11.0], [1.0]), ([41.0], [4.0]), ([71.0], [7.0])],
dtype=[('fd', '<f8', (1,)), ('av', '<f8', (1,))])
================
を、私は見ることができます2次元配列としてb
;および2D配列のインデックスとの2つのサブカラム選択:
In [1083]: b.view((float,8)).shape
Out[1083]: (3, 8)
In [1084]: b.view((float,8))[:,[0,4]]
Out[1084]:
array([[ 11., 1.],
[ 41., 4.],
[ 71., 7.]])
同様に、c
が2D
In [1085]: c.view((float,2))
Out[1085]:
array([[ 11., 1.],
[ 41., 4.],
[ 71., 7.]])
と見なすことができると私ができ、ブランクd
に、ポート値:
In [1090]: d=np.zeros((b.shape), dtype=c.dtype)
In [1091]: d.view((float,2))[:]=b.view((float,8))[:,[0,4]]
In [1092]: d
Out[1092]:
array([([11.0], [1.0]), ([41.0], [4.0]), ([71.0], [7.0])],
dtype=[('fd', '<f8', (1,)), ('av', '<f8', (1,))])
少なくとも、この場合、フィールドバイステップでコピーする必要はありません。しかし、私はテストなしでは、より速いとは言えません。私の以前の答えでは、フィールドごとのコピーは、多くの行を処理するときに比較的高速であることがわかりました。
あなたはどのようにcを持っているか説明できますか?私はそれを見つけるように見えない。ありがとう – ssm
'c'はポストからあなたの' 'array([([11.0]、[1.0])、...( 'av'、 '
hpaulj
私はビューを使ってコピーを行う方法を理解しました。 – hpaulj