Используя numpy's nditer , можно ли вручную обрабатывать размеры с разными
длина
Например, допустим, у меня был массив A [5, 100], и я хотел выбрать каждый
10 вдоль второй оси, поэтому я получу массив B [5,10]. Это
можно сделать это с помощью nditer, обрабатывая итерацию по второй оси
вручную, конечно (вероятно, в Cython)?
Еще один способ задать этот вопрос: можно ли попросить nditer разрешить мне вручную выполнить итерации по предоставленному мною размеру?
Я хочу иметь возможность сделать что-то подобное (изменено из этого примера )
@cython.boundscheck(False)
def sum_squares_cy(arr):
cdef np.ndarray[double] x
cdef np.ndarray[double] y
cdef int size
cdef double value
cdef int j
axeslist = list(arr.shape)
axeslist[1] = -1
out = zeros((arr.shape[0], 10))
it = np.nditer([arr, out], flags=['reduce_ok', 'external_loop',
'buffered', 'delay_bufalloc'],
op_flags=[['readonly'], ['readwrite', 'no_broadcast']],
op_axes=[None, axeslist],
op_dtypes=['float64', 'float64'])
it.operands[1][...] = 0
it.reset()
for xarr, yarr in it:
x = xarr
y = yarr
size = x.shape[0]
j = 0
for i in range(size):
#some magic here involving indexing into x[i] and y[j]
return it.operands[1]
Имеет ли это смысл? Можно ли это сделать?