我无法修改循环中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应该用省略号”
编入索引我该怎么做?语法是什么?
答案 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 = 1
与A[i]= 1
或x[...]=1
不同。
答案 2 :(得分:0)
这个怎么样?
labels_class[label_class == classifier] = 1
labels_class[label_class != classifier] = 0