【问题标题】:Python Numpy Structured Array (recarray) assigning values into slicesPython Numpy结构化数组(recarray)将值分配到切片中
【发布时间】:2011-03-04 18:27:58
【问题描述】:

下面的例子展示了我想要做什么:

>>> 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 分配相同的值。我尝试了很多方法,但从未成功。有什么办法吗?

谢谢你, 俊

【问题讨论】:

标签: python numpy slice recarray


【解决方案1】:

当您说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

【讨论】:

  • 非常感谢。所以问题出在字段访问上。
猜你喜欢
  • 2015-03-15
  • 1970-01-01
  • 2020-04-01
  • 2016-10-10
  • 2023-03-18
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多