提前感谢您的帮助!
我有一个4D numpy数组
a = np.random.random_integers(1,5,(2,3,3,4))
>>> a
array([[[[5, 2, 5, 3],
[1, 3, 1, 2],
[4, 3, 1, 2]],
[[3, 1, 3, 5],
[2, 5, 2, 3],
[1, 4, 1, 3]],
[[4, 2, 4, 3],
[1, 3, 5, 2],
[3, 5, 4, 4]]],
[[[1, 1, 2, 3],
[2, 1, 5, 3],
[1, 5, 5, 4]],
[[1, 2, 3, 3],
[5, 2, 4, 3],
[4, 3, 4, 5]],
[[4, 3, 5, 3],
[3, 5, 2, 4],
[4, 3, 3, 1]]]])
字符串
我有一个3D numpy数组B,它的形状与a的最后三个维度相同,由0和1组成。
b = np.random.random_integers(0,1,(3,3,4))
>>> b
array([[[0, 0, 0, 0],
[0, 0, 0, 1],
[1, 0, 1, 0]],
[[0, 1, 1, 0],
[1, 1, 0, 1],
[1, 1, 0, 1]],
[[0, 0, 0, 1],
[0, 1, 1, 0],
[1, 0, 1, 0]]])
型
对于a中的每个(3,3,4)数组,我想选择数组B中相同位置的值为1的元素,并根据另一个数组c更新a中的这些值,该数组c具有a的第一维形状:
c = np.array([-1, -2])
型
因此,a[0,:]中的值在数组B中的值为1时将变为-1(c[0])
而a[1,:]中的值在数组B中的值为1时将变为-2(c[1])
最后我想得到一个数组,它的形状和a的形状一样,并且以一种有效的方式更新了值
>>> return
array([[[[5, 2, 5, 3],
[1, 3, 1, -1],
[-1, 3, -1, 2]],
[[3, -1, -1, 5],
[-1, -1, 2, -1],
[-1, -1, 1, -1]],
[[4, 2, 4, -1],
[1, -1, -1, 2],
[-1, 5, -1, 4]]],
[[[1, 1, 2, 3],
[2, 1, 5, -2],
[-2, 5, -2, 4]],
[[1, -2, -2, 3],
[-2, -2, 4, -2],
[-2, -2, 4, -2]],
[[4, 3, 5, -2],
[3, -2, -2, 4],
[-2, 3, -2, 1]]]])
型
2条答案
按热度按时间7xzttuei1#
使用广播和
numpy.where
:字符串
或者(来自@ Ephophylaxs):
型
或者,分配给
a
:型
输出量:
型
ktecyv1j2#
直截了当地说:
个字符