1. ホーム
  2. python

[解決済み] 次元情報を失うことなくNumpyのインデックススライスを行う。

2022-09-22 23:13:57

質問

numpyを使用していますが、次元情報を失うことなく行のインデックスを作成したいです。

import numpy as np
X = np.zeros((100,10))
X.shape        # >> (100, 10)
xslice = X[10,:]
xslice.shape   # >> (10,)  

この例ではxsliceが1次元になっていますが、(1,10)にしたいのです。 RではX[10,:,drop=F]とします。numpyでも同じようなものがあるのでしょうか。私はドキュメントでそれを見つけることができませんでしたし、同じような質問がされているのを見ませんでした。

ありがとうございます!

どのように解決するのですか?

一番簡単なのは x[None, 10, :] または同等に(しかしもっと読みやすく) x[np.newaxis, 10, :] .

なぜデフォルトでないかというと、個人的には、常にシングルトンの次元を持つ配列があると、すぐにイライラしてしまうからです。 numpyの開発者も同じように感じていたのでしょう。

また、numpyでは配列のブロードキャストも非常にうまく扱えるので、スライスの元となった配列の次元を保持する理由はほとんどないでしょう。 もしそうであれば、次のようなことがあります。

a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b

はうまくいかないか、実装がはるかに困難になるでしょう。

(少なくとも、スライスの際に次元情報を削除することに対するnumpy開発者の理由についての私の推測です)