Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python3】numpy arrayが2次元リストか1次元のリストか判定したい

dataというnumpy arrayがあったとして、それが2次元リストか1次元リストか知りたい

# 1次元だけの空のarray
data = []

# 1次元のarray
data = [1, 2, 3]

# 2次元のarray
data = [[1, 2, 3], [4, 5, 6]]

これらを区別したい

                            • -

そのために

  • len(data)
  • data.shape
  • len(data.shape)

が使えそうかな〜とパッと思いました

ただ、data.shapeを使うと、すべて対応できそう

if data.shape[0] > 0 and len(data.shape) == 1:
 # これは data = [1, 2, 3] の場合
if data.shape[0] > 0 and len(data.shape) > 1:
 # これは data = [[1, 2, 3], [4, 5, 6]] の場合
if data.shape[0] == 0
# それ以外がdata = [] の場合

で判定できそう


なんでこんな判定が必要だったかというと、
テキストファイルをnp.genfromtxtという関数で読み込んであれこれやったときに、このテキストファイルの中身が1行か2行以上かでarrayの形が変わってくるから・・・
(たぶんnp.loadtxtでも同じことが起こりえる)

1次元だと
data[0]
data[1]
data[2]
とかで参照できるけど、

2次元だと
data[i, 0]
data[i, 1]
...
のように書かないといけないので、書き方が異なるっぽい

ランキングに参加中、クリックにご協力お願いします!