翻转或反转numpy数组中的列

ql3eal8s  于 2023-10-19  发布在  其他
关注(0)|答案(6)|浏览(115)

我想翻转数组中数组的第一个和第二个值。一个简单的解决方案是遍历数组。做这件事的正确方法是什么?

import numpy as np
contour = np.array([[1, 4],
                    [3, 2]])

flipped_contour = np.empty((0,2))
for point in contour:
    x_y_fipped = np.array([point[1], point[0]])
    flipped_contour = np.vstack((flipped_contour, x_y_fipped))

print(flipped_contour)

[[4. 1.]
[2. 3.]]
lpwwtiir

lpwwtiir1#

使用名称恰当的np.flip

np.flip(contour, axis=1)

或者

np.fliplr(contour)
array([[4, 1],
       [2, 3]])
tzcvj98z

tzcvj98z2#

可以使用numpyindexing

contour[:, ::-1]
ztyzrc3y

ztyzrc3y3#

除了COLDSPEED's answer,如果我们只想交换第一列和第二列,而不是翻转整个数组:

contour[:, :2] = contour[:, 1::-1]

这里contour[:, 1::-1]是由数组contour的前两列以相反的顺序形成的数组。然后将其分配给前两列(contour[:, :2])。现在交换了前两列。
通常,要交换第i列和第j列,请执行以下操作:

contour[:, [i, j]] = contour[:, [j, i]]
mtb9vblg

mtb9vblg4#

以下是两种交换前两列的非就地方式:

>>> a = np.arange(15).reshape(3, 5)
>>> a[:, np.r_[1:-1:-1, 2:5]]
array([[ 1,  0,  2,  3,  4],
       [ 6,  5,  7,  8,  9],
       [11, 10, 12, 13, 14]])

>>> np.c_[a[:, 1::-1], a[:, 2:]]
array([[ 1,  0,  2,  3,  4],
       [ 6,  5,  7,  8,  9],
       [11, 10, 12, 13, 14]])
rkue9o1l

rkue9o1l5#

>>> your_array[indices_to_flip] = np.flip(your_array[indices_to_flip], axis=1)
okxuctiv

okxuctiv6#

另一种方法是使用permutation matrices

import numpy as np

contour = np.array([[1, 4],
                [3, 2]])

P = np.array([[0, 1],
         [1, 0]])#permutation matrix that will 
                 #swap column 1 with column 2 if right multiplied

contour = contour @ P
print(contour)

输出量:

array([[4, 1],
   [2, 3]])

相关问题