MATLAB: fliplr() > Numpy:実装 > 1次元とN(>1)次元で別処理が必要 | np.flipud(), np.fliplr(), [::-1], ascontiguousarray


動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)

MATLAB

>> xs = [3 1 4]

xs =

     3     1     4

>> fliplr(xs)

ans =

     4     1     3

>> xs = [3 1 4; 1 5 9]

xs =

     3     1     4
     1     5     9

>> fliplr(xs)

ans =

     4     1     3
     9     5     1

Numpy

関連: Numpy: fliplr() > ValueError: Input must be >= 2-d. > 1次元のarrayにはエラーを出す

1次元arrayに対してはfliplr()は上記のリンクのようにエラーを出す。
1次元arrayだけ別処理が必要になる。

反転方法として以下の情報がある。
https://stackoverflow.com/questions/6771428/most-efficient-way-to-reverse-a-numpy-array

以下の実装とした。

https://ideone.com/dZJLGr (Python 3.5)

import numpy as np


def get_fliplr(xs):
    xs = np.array(xs)
    if xs.ndim == 1:
        return np.flipud(xs)
    return np.fliplr(xs)

res = get_fliplr([3, 1, 4])
print(res)
res = get_fliplr([[3, 1, 4], [1, 5, 9]])
print(res)

run
Success #stdin #stdout 0.12s 24844KB
[4 1 3]
[[4 1 3]
 [9 5 1]]

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.flipud.html
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.fliplr.html

備考

に記載の[::-1]ascontiguousarrayも興味を引いた。