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

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

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2039閲覧

Numpyの範囲外インデックスの折り返し

tas0g

総合スコア9

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/20 07:17

質問

PythonのNumpyを使ったときの、範囲外のインデックスにアクセスした時に、折り返したインデックスの値を取得/設定したいです。
そのような動作をする簡単な方法をご存知の方がいれば教えてください!

コード例

python

1a = np.arange(10) 2a 3# -> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 4 5# 通常であれば範囲外アクセスはエラーとなります。 6a[12] 7# -> IndexError: index 12 is out of bounds for axis 0 with size 10 8 9# このように折り返したインデックスで値を取得したいです。 10a[12] 11# -> 2 12 13# 同様に、値の設定も折り返したいです。 14a[12] = 12 15a 16# -> array([ 0, 1, 12, 3, 4, 5, 6, 7, 8, 9]) 17 18 19# 同様に、sliceのアクセスも行いたいです。 20a = np.arange(10) 21a[8:12] 22# -> array([8, 9, 0, 1]) 23 24a[8:12] = -1 25a 26# -> array([-1, -1, 2, 3, 4, 5, 6, 7, -1, -1])

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

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

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

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

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

guest

回答2

0

ベストアンサー

値の取得は numpy.take, 値の設定は numpy.put を使い、mode="wrap" を指定すると質問に記載の内容が実現できます。

numpy.take — NumPy v1.17 Manual
numpy.put — NumPy v1.17 Manual

python

1import numpy as np 2 3a = np.arange(10) 4# -> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 5 6indices = np.arange(8, 12) 7print(np.take(a, indices, mode="wrap")) 8# [8 9 0 1] 9 10indices = np.arange(8, 12) 11np.put(a, indices, -1, mode="wrap") 12print(a) 13# [-1 -1 2 3 4 5 6 7 -1 -1]

投稿2020/02/20 07:43

tiitoi

総合スコア21956

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

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

tas0g

2020/02/20 07:45

回答ありがとうございます! まさに、私が実現したかったことでした。
guest

0

インデックスを書くとき n ではなく n % 10 と書けば良いでしょう。
あるいは勝手に折り返してくれる方法を探しているのでしょうか?

投稿2020/02/20 07:20

LouiS0616

総合スコア35668

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

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

tas0g

2020/02/20 07:21

回答ありがとうございます! 勝手に折り返してくれる方法を探しています。 特に、sliceでアクセスするときに、勝手に折り返してくれる方法があればと思って質問しました。
LouiS0616

2020/02/20 07:22

あ、この方法だとスライスの方には対応していませんね。 とりあえず範囲外アクセスを回避する方法ということで。
LouiS0616

2020/02/20 07:23

自動的に折り返したいなら、適当にラッパークラスを組むことになると思います。 私の知る範囲ではNumPyにそのような機能は無いです (私が知らないだけかもしれませんが) 。
tas0g

2020/02/20 07:26

回答ありがとうございます。 NumPyそのような機能がなさそうだということを確認できたので、助かりました。
LouiS0616

2020/02/20 07:48

tiitoiさんの方法で実現できますね。不勉強でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問