如果我事先不知道轴,怎样才能替换数组值?
例如,如果我想做类似
的事情arr[:,5]
但我事先并不知道轴,并希望将其设为一般我可以使用take
:
arr.take(5, axis=1)
并且它将起作用。
但是,如果我想要像
那样的话arr[:,5]=10
但我事先不知道轴,我该怎么办呢?我显然无法做arr.take(5, axis=1) = 10
,而我无法找到执行该功能的功能。
最接近的功能(我发现)将是np.put()
,但我不认为可以用它完成。
答案 0 :(得分:3)
您可以将所需的轴交换到第一个位置,然后进行分配。 swapaxes
返回一个视图,因此作业将按照您的意愿进行。
例如,
In [87]: np.random.seed(123)
In [88]: a = np.random.randint(1, 9, size=(5, 8))
In [89]: a
Out[89]:
array([[7, 6, 7, 3, 5, 3, 7, 2],
[4, 3, 4, 2, 7, 2, 1, 2],
[7, 8, 2, 1, 7, 1, 8, 2],
[4, 7, 6, 5, 1, 1, 5, 2],
[8, 4, 3, 5, 8, 3, 5, 8]])
In [90]: ax = 1
In [91]: k = 5
In [92]: val = 99
In [93]: a.swapaxes(0, ax)[k] = val
In [94]: a
Out[94]:
array([[ 7, 6, 7, 3, 5, 99, 7, 2],
[ 4, 3, 4, 2, 7, 99, 1, 2],
[ 7, 8, 2, 1, 7, 99, 8, 2],
[ 4, 7, 6, 5, 1, 99, 5, 2],
[ 8, 4, 3, 5, 8, 99, 5, 8]])
In [95]: ax = 0
In [96]: k = 2
In [97]: val = -1
In [98]: a.swapaxes(0, ax)[k] = val
In [99]: a
Out[99]:
array([[ 7, 6, 7, 3, 5, 99, 7, 2],
[ 4, 3, 4, 2, 7, 99, 1, 2],
[-1, -1, -1, -1, -1, -1, -1, -1],
[ 4, 7, 6, 5, 1, 99, 5, 2],
[ 8, 4, 3, 5, 8, 99, 5, 8]])
答案 1 :(得分:2)
我认为没有NumPy功能,但构建自己的功能并不难:
def replace(arr, indices, val, axis):
s = [slice(None)]*arr.ndim
s[axis] = indices
arr[s] = val
import numpy as np
def replace(arr, indices, val, axis):
s = [slice(None)]*arr.ndim
s[axis] = indices
arr[s] = val
arr = np.zeros((3,6,2))
indices = 5
axis = 1
val = 10
replace(arr, indices, val, axis)
print(np.take(arr, indices, axis))
打印
[[ 10. 10.]
[ 10. 10.]
[ 10. 10.]]