以下示例显示了我想要做的事情:
>>> 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
分配相同的值。我尝试了很多方法但从未成功过。有没有办法做到这一点?
谢谢你, 俊
答案 0 :(得分: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)]
如需更深入了解,请参阅this post by Robert Kern。