6

次の例は、私がやりたいことを示しています。

>>> test
rec.array([(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
   (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)], 
  dtype=[('ifAction', '|i1'), ('ifDocu', '|i1'), ('ifComedy', '|i1')])

>>> test[['ifAction', 'ifDocu']][0]
(0, 0)

>>> test[['ifAction', 'ifDocu']][0] = (1,1)
>>> test[['ifAction', 'ifDocu']][0]
(0, 0)

(1,1)そこで、に値を割り当てたいと思いますtest[['ifAction', 'ifDocu']][0]test[['ifAction', 'ifDocu']][0:10] = (1,1)(最終的には、に同じ値を割り当てて、のようなことをしたいと思います0:10。私は多くの方法を試しましたが、成功しませんでした。これを行う方法はありますか?

ありがとう、ジュン

4

1 に答える 1

5

あなたが言うとき、あなたtest['ifAction']はデータのビューを取得します。test[['ifAction','ifDocu']]ファンシーインデックスを使用していると言うと、データのコピーを取得します。コピーを変更すると元のデータが変更されないため、コピーは役に立ちません。

したがって、これを回避する方法は、値を個別に割り当てること test['ifAction']ですtest['ifDocu']

test['ifAction'][0]=1
test['ifDocu'][0]=1

例えば:

import numpy as np
test=np.rec.array([(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
   (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)], 
  dtype=[('ifAction', '|i1'), ('ifDocu', '|i1'), ('ifComedy', '|i1')])

print(test[['ifAction','ifDocu']])
# [(0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0)]
test['ifAction'][0]=1
test['ifDocu'][0]=1

print(test[['ifAction','ifDocu']][0])
# (1, 1)
test['ifAction'][0:10]=1
test['ifDocu'][0:10]=1

print(test[['ifAction','ifDocu']])
# [(1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1)]

内部の詳細については、RobertKernによるこの投稿を参照してください。

于 2010-06-17T03:11:24.153 に答える