如何给一个零维的numpy数组赋值?

4
假设我有一个数组 x = np.array(3),它的 x.ndim == 0。如何为这个数组分配一个新值?x[0] = 2 会导致 IndexError 错误,x[:] = 2 也是一样。请帮我解决这个问题。

2
相关问题:https://stackoverflow.com/questions/49581213/is-there-a-better-way-to-assign-a-new-value-to-a-numpy-array-scalar。 - Nathan
x[...]=2x[()]=2 可能会起作用。 - hpaulj
2个回答

1
这可以通过使用x.flat来完成,它会返回一个np.flatiter实例:
import numpy as np

x = np.array(3)
x.flat[:] = 2
# or x.flat[0] = 2

或者通过使用省略号或空元组对原始数组进行索引:
x[...] = 2
x[()] = 2

这些方法(平面冒号索引、平面零索引、省略号索引、空元组索引以及BENY答案中的 ndarray.put)似乎存在微妙的差异:比较一下类型为对象且维度为零的数组 arr = np.empty([], dtype=object) 的一个极端例子;以下几种方式看起来并不是可互换的:a)arr [()] = np.array([1, 2, 3]),b)arr[...] = np.array([1, 2, 3]),c)arr.flat[:] = np.array([1, 2, 3]),d)arr.flat[0] = np.array([1, 2, 3]),e)arr.put(0, np.array([1, 2, 3])) - iutlu

0

我将使用put

x.put(0,2)
x
Out[91]: array(2)

啊,我不知道这个函数。它似乎在内部使用了.flat;是否有一些情况下.put更好,还是只是风格上的偏好?我想如果你使用mode="wrap"mode="clip"的话? - Nathan
@Nathan 只是风格偏好 :-) - BENY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接