使用numpy的nditer,是否可以手动处理不同的维度 长度?
例如,假设我有一个数组A [5,100],我想要每个样本 10沿着第二轴,所以我最终得到一个数组B [5,10]。是吗 可以用nditer执行此操作,处理第二轴上的迭代 当然是手动(可能在cython中)?
另一种问这个问题的方法是,是否可以让nditer允许我手动迭代我提供的一组维度?
我希望能够做到这样的事情(从example修改)
@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]
这有意义吗?有可能吗?
答案 0 :(得分:0)
a = numpy.arange(500.0).reshape((5,100))
numpy.lib.stride_tricks.as_strided(a, (5,10), (6400,64))