修改数组numpy中的实际元素值

时间:2015-04-06 20:03:25

标签: python arrays numpy access-modifiers

我无法修改循环中numpy数组的实际值。 我的代码如下:

labels_class = np.copy(labels_train)
for label in labels_class:
  labels_class[label] = 1 if (label == classifier) else 0

labels_class - 只是一个大小为N且值为[0,39]的numpy数组。 labels_class[label]的值在循环中是正确的(== modified),但在循环labels_class之外保持不变。

我也试过nditer,但没有用:

 for label in np.nditer(labels_class, op_flags=['readwrite']):
      label = 1 if (label == classifier) else 0

reference中,据说“要实际修改数组的元素,x应该用省略号”

编入索引

我该怎么做?语法是什么?

3 个答案:

答案 0 :(得分:4)

您的迭代器不是创建索引,而是创建数组中的实际元素

for label in labels_class

在上面label不是索引,而是您尝试更改的实际元素

您可以这样做:

for i, label in enumerate(labels_class):
     labels_class[i] = 1 if (label == classifier) else 0

答案 1 :(得分:2)

演示了使用nditer修改数组值的语法

http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#modifying-array-values

a = np.arange(6).reshape(2,3)
for x in np.nditer(a, op_flags=['readwrite']):
    x[...] = 2 * x

'x应使用省略号索引'引用x[...]

使用enumerate进行索引也完全没问题。但这是使用nditer执行此操作的方法。请参阅nditer页面中有关使用flags=['f_index']

的后续部分

在迭代数组时,您需要清楚地理解变量之间的区别,这些变量是可以修改的索引,标量或数组元素。 x = 1A[i]= 1x[...]=1不同。

答案 2 :(得分:0)

这个怎么样?

labels_class[label_class == classifier] = 1
labels_class[label_class != classifier] = 0