我想在数组中翻转数组的第一个和第二个值。一个天真的解决方案是遍历数组。这样做的正确方法是什么?
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.]]
答案 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]
)。现在交换了前两列。
通常,要交换i
和j
列,请执行以下操作:
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]])