如何在“s”路径中展开numpy数组?

2024-09-29 20:32:39 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个2D np.array

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]]) 

我如何在s路径中展开它,以便

>>> sravel(arr)
array([1, 2, 3, 6, 5, 4, 7, 8, 9])

另外,我也希望选择先沿0轴向下,即

>>> sravel(arr, [0,1])
array([1, 4, 7, 8, 5, 2, 3, 6, 9])

这里括号的第二个参数表示轴的顺序


Tags: 路径参数顺序nparray括号arrsravel
1条回答
网友
1楼 · 发布于 2024-09-29 20:32:39

我不认为有任何直接的方法可以做到这一点,但要得到这样的结果并不难:

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

arr2 = arr.copy()
arr2[1::2] = np.flip(arr[1::2], 1)
print(arr2.ravel())
# [1 2 3 6 5 4 7 8 9]

arr3 = arr.T.copy()
arr3[1::2] = np.flip(arr.T[1::2], 1)
print(arr3.ravel())
# [1 4 7 8 5 2 3 6 9]

编辑:正如scleronomic所指出的,第二种情况也可以通过F-连续数组完成:

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# The array is copied with F order so ravel does not require another copy later
arr3 = arr.copy(order='F')
arr3[:, 1::2] = np.flip(arr3[:, 1::2], 0)
print(arr3.ravel(order='F'))
# [1 4 7 8 5 2 3 6 9]

相关问题 更多 >

    热门问题