更改numpy数组中的元素

时间:2017-07-06 21:20:34

标签: python arrays numpy

我一直在筛选Numpy教程,我尝试了几个不适合我的功能。我想采取如下数组:

    import numpy as np
    a = np.array([[[1, 2, 3, 4]],[[5, 6, 7, 8]],[[1, 2, 3, 4]],[[5, 6, 7, 8]]])

,其格式为

     [[[1 2 3 4]]

     [[4 5 6 7]]

     [[1 2 3 4]]

     [[4 5 6 7]]]

这是一个不同的函数给我结果的格式,因此,表单不是通过选择。我想做的是让其他所有元素都消极,所以它看起来像

     [[[1 -2 3 -4]]

     [[4 -5 6 -7]]

     [[1 -2 3 -4]]

     [[4 -5 6 -7]]]

我尝试np.negative(a),这使每个元素都消极。我认为可以使用where选项,但是,我找不到让它只影响其他所有组件的方法。我还构建了一个双循环来作为列表移动数组,但是,我似乎无法从这些列表重建数组

     new = np.array([])

     for n in range(len(a)):
         for x1,y1,x2,y2 in a[n]:
              y1 = -1 * y1
              y2 = -1 * y2
             row = [x1, y1, x2, y2]
         new = np.append(new,row)
     print(a)

我觉得我让这太复杂了,但是,我没有想到更好的方法。

2 个答案:

答案 0 :(得分:2)

您可以通过 -1 slice 结合使用其他所有列:

a[...,1::2] *= -1
# here use ... to skip the first few dimensions, and slice the last dimension with 1::2 
# which takes element from 1 with a step of 2 (every other element in the last dimension)
# now multiply with -1 and assign it back to the exact same locations

a
#array([[[ 1, -2,  3, -4]],

#       [[ 5, -6,  7, -8]],

#       [[ 1, -2,  3, -4]],

#       [[ 5, -6,  7, -8]]])

您可以详细了解省略号here

答案 1 :(得分:2)

> Dir /B
11foo.pcx
12red.pcx
13bar.pcx
3366.pcx
96blue.pcx
9red.pcx
alipro.pcx

> SO_44875749.cmd
11foo.pcx
13bar.pcx
3366.pcx
alipro.pcx

沿最后一轴取每个其他元素并将它们乘以-1。