Python 在numpy中替换子阵列的元素

Python 在numpy中替换子阵列的元素,python,numpy,Python,Numpy,假设我有以下数组: arr = array([[[-9, -9, 1], [-9, 0, 4], [-9, -9, 1]], [[-9, 1, 1], [ 0, 4, 3], [-9, 1, 2]]]) 对于每个元素,我想通过第一行,如果第一个元素和最后一个元素不等于零,我想用零替换它们。输出应如下所示: array([[[-9, -9, 1], [0, 0, 0]

假设我有以下数组:

arr = array([[[-9, -9,  1],
        [-9,  0,  4],
        [-9, -9,  1]],

       [[-9,  1,  1],
        [ 0,  4,  3],
        [-9,  1,  2]]])
对于每个元素,我想通过第一行,如果第一个元素和最后一个元素不等于零,我想用零替换它们。输出应如下所示:

array([[[-9, -9,  1],
            [0,  0,  0],
            [-9, -9,  1]],
    
           [[-9,  1,  1],
            [ 0,  4,  0],
            [-9,  1,  2]]])
在这里,我们查找
[-9,0,4]
[0,4,3]
并将它们转换为
[0,0,0]和
[0,4,0]`。我尝试了以下几点:对于我写的第一个元素:

for i in arr:
    print(np.where(i[1][0]!=0, 0, i[1]))
for i in arr:
    print(np.where(i[1][2]!=0, 0, i[1]))
然后我写了第二个元素:

for i in arr:
    print(np.where(i[1][0]!=0, 0, i[1]))
for i in arr:
    print(np.where(i[1][2]!=0, 0, i[1]))

我本打算加入结果,并在arr中替换它们,但我的第二个结果是错误的。我还认为一定有更好的方法。

如果要将每个子数组中第二行的第一个元素和最后一个元素设置为零,可以执行以下操作:

arr[:,1,[0,-1]] = 0

arr
#[[[-9 -9  1]
#  [ 0  0  0]
#  [-9 -9  1]]

# [[-9  1  1]
#  [ 0  4  0]
#  [-9  1  2]]]

其中在
:,1,[0,-1]
中指定所有子数组,
1
指定每个子数组中的第二行,并且
[0,-1]
选择行中的第一个和最后一个元素。

如果要将每个子数组中第二行的第一个元素和最后一个元素设置为零,可以执行以下操作:

arr[:,1,[0,-1]] = 0

arr
#[[[-9 -9  1]
#  [ 0  0  0]
#  [-9 -9  1]]

# [[-9  1  1]
#  [ 0  4  0]
#  [-9  1  2]]]
其中,
:,1,[0,-1]
指定所有子数组,
1
指定每个子数组中的第二行,
[0,-1]
选择行中的第一个和最后一个元素。

所说的“第一行”是指索引为1的行吗?所说的“第一行”是指索引为1的行吗???