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),为 for 分配相同的值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)]

如需更深入地了解引擎盖,请参阅Robert Kern 的这篇文章

于 2010-06-17T03:11:24.153 回答