質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1249閲覧

ndarrayで最後の行列の取得

nono1234

総合スコア25

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/01/24 06:42

前提・実現したいこと

pythonのnumpyのndarrayの最後の要素の取得なのですが,行数が2以上の時は[-1]で最後の行を取得できるのですが、行数が1の時は[-1]で最後の要素しか取得できません。今、下に示すソースコードでaとbでどちらも[x,y,z]の形で取り出したいのですが、なにか良い方法はないでしょうか?

発生している問題・エラーメッセージ

該当のソースコード

python

1import numpy as np 2a=np.array([[1,2,3],[4,5,6]]) 3b=np.array([7,8,9]) 4print(anyfunction(a))#[4,5,6]とでてほしい 5print(anyfunction(b))#[7,8,9]とでてほしい 6 7""" 8print(a[-1])->[4,5,6] 9print(b[-1])->9 10""" 11

試したこと

anyfunctionの中身を配列の大きさに着目してifで判断という手法を現在はとっています

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namnium1125

2018/01/24 06:44

b=np.array([[7,8,9]])はダメということでしょうか?
nono1234

2018/01/24 06:50

説明不足ですいません。namnium1125さんのおっしゃる通り、bをそのようにしたら[7,8,9]を返すのですが、その代わりaが[[1,2,3],[4,5,6]]になってしまうのです。aもbも入れたときにどちらも[x,y,z]の形で返すようなスマートなanyfunctionはないかということです。
LouiS0616

2018/01/24 06:52

『その代わりaが[[1,2,3],[4,5,6]]になってしまうのです。』???現時点でその形式では?
nono1234

2018/01/24 07:02

紛らわしい質問文で申し訳ありませんでした。ndimで次元数が取得できるのですね。今まではshapeやsizeで何とかしようとしていたのですが、私の本来のコードではaの行数が増えていくので途中でエラーを吐く可能性があり悩んでいました。解決できそうです。ありがとうございました。
guest

回答2

0

ベストアンサー

aとbとで次元が異なりますから、二次元に揃えれば良いです。
具体的にはb = np.array([[7,8,9]])という風に。

ifで分岐するとしても、次元数で分岐するのが良いでしょう。

Python

1def anyfunction(arr): 2 if arr.ndim == 1: 3 return arr 4 elif arr.ndim == 2: 5 return arr[-1] 6 raise ValueError

投稿2018/01/24 06:47

編集2018/01/24 06:51
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nono1234

2018/01/24 06:55

申し訳ありません。ソースコードが長いので現象を示す簡単なコードを書いたのですが、問題の意図が伝わりにくくなってしまいました。 aが一次元でも二次元でも行を返すような書き方はないだろうかという質問です。おっしゃるとおりbは[7,8,9]を返しますが、その代わり同じ処理をaにもしなければならないのでaが[[1,2,3],[7,8,9]]を返すことになってしまいます。
LouiS0616

2018/01/24 07:02

意味合い的には二次元に統一した方が良いと思いますが。
nono1234

2018/01/24 07:04

まさにそのとおりです。そこから見直してみます。素早い回答ありがとうございました。
guest

0

x,y,zが確定しているのなら。

python

1def anyfunction(arr): 2 return arr.reshape(-1, 3)[-1]

投稿2018/01/24 08:36

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nono1234

2018/01/24 10:23

reshapeの引数に-1を指定すると、いい感じに、しかも二次元配列に調整してくれるなんて初耳でした!!ありがとうございました!参考にさせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問