在numpy数组中翻转或反转列

时间:2018-03-28 23:26:10

标签: python arrays numpy

我想在数组中翻转数组的第一个和第二个值。一个天真的解决方案是遍历数组。这样做的正确方法是什么?

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.]]

4 个答案:

答案 0 :(得分:4)

使用名称恰当的np.flip

np.flip(contour, axis=1)

或者,

np.fliplr(contour)

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

答案 1 :(得分:4)

您可以使用numpy indexing

contour[:, ::-1]

答案 2 :(得分:4)

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

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

此处contour[:, 1::-1]是由数组contour的前两列以相反顺序形成的数组。然后将其分配给前两列(contour[:, :2])。现在交换了前两列。

通常,要交换ij列,请执行以下操作:

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

答案 3 :(得分:3)

以下是交换前两列的两种非原位方式:

>>> 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]])