确定 NumPy 数组的切片索引时遇到问题

我有一个 NumPyX * Y元素数组,表示为扁平数组 ( arr = np.array(x * y))。


给定以下值:


X = 832

Y = 961

我需要按以下顺序访问数组的元素:


arr[0:832:2]

arr[1:832:2]

arr[832:1664:2]

arr[833:1664:2]

...

arr[((Y-1) * X):(X * Y):2]

我不确定在数学上如何实现start循环stop中的每次迭代。


白猪掌柜的
浏览 129回答 3
3回答

摇曳的蔷薇

This should do the trickY = 961X = 832all_ = np.random.rand(832*961)# Iterating over the values of yfor i in range(1,Y):    # getting the indicies from the array we need    # i - 1 = Start    # X*i = END    # 2 is the step    indicies = list(range(i-1,X*i,2))    # np.take slice values from the array or get values corresponding to the list of indicies we prepared above    required_array = np.take(indices=indices)    

慕婉清6462132

假设您有一个形状数组(x * y,),想要分块处理x。您可以简单地重新调整数组的形状来调整(y, x)和处理行:>>> x = 832>>> y = 961>>> arr = np.arange(x * y)现在重塑并批量处理。在下面的示例中,我取每行的平均值。您可以通过这种方式将任何您想要的函数应用于整个数组:>>> arr = arr.reshape(y, x)>>> np.mean(arr[:, ::2], axis=1)>>> np.mean(arr[:, 1::2], axis=1)重塑操作不会更改数组中的数据。它指向的缓冲区与原始缓冲区相同。ravel您可以通过调用数组来反转重塑。

繁花不似锦

对于对此解决方案感兴趣的任何人(每次迭代,而不是每次迭代增加移位):for i in range(Y):    shift = X * (i // 2)    begin = (i % 2) + shift    end = X + shift    print(f'{begin}:{end}:2')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python