Numpyndindex()
はあなたが挙げた例で機能しますが、すべてのユースケースに対応しているわけではありません。任意の、、、およびrange()
の両方を許可するPythonの組み込みとは異なり、numpyは。のみを受け入れます。(はであると推定され、はです。)start
stop
step
np.ndindex()
stop
start
(0,0,...)
step
(1,1,...)
これは、組み込みrange()
関数のように機能する実装です。つまり、任意の//引数を許可start
しますが、単なる整数ではなくタプルで機能stop
します。step
import sys
from itertools import product, starmap
# Python 2/3 compatibility
if sys.version_info.major < 3:
from itertools import izip
else:
izip = zip
xrange = range
def ndrange(start, stop=None, step=None):
if stop is None:
stop = start
start = (0,)*len(stop)
if step is None:
step = (1,)*len(stop)
assert len(start) == len(stop) == len(step)
for index in product(*starmap(xrange, izip(start, stop, step))):
yield index
例:
In [7]: for index in ndrange((1,2,3), (10,20,30), step=(5,10,15)):
...: print(index)
...:
(1, 2, 3)
(1, 2, 18)
(1, 12, 3)
(1, 12, 18)
(6, 2, 3)
(6, 2, 18)
(6, 12, 3)
(6, 12, 18)