为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2023-06-27 16:29:00
我有一个 NumPyX * Y元素数组,表示为扁平数组 ( arr = np.array(x * y))。给定以下值:X = 832Y = 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中的每次迭代。
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

This should do the trick


Y = 961

X = 832


all_ = np.random.rand(832*961)


# Iterating over the values of y

for 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)

    


查看完整回答
反对 回复 2023-06-27
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

假设您有一个形状数组(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您可以通过调用数组来反转重塑。


查看完整回答
反对 回复 2023-06-27
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

对于对此解决方案感兴趣的任何人(每次迭代,而不是每次迭代增加移位):


for i in range(Y):

    shift = X * (i // 2)

    begin = (i % 2) + shift

    end = X + shift

    print(f'{begin}:{end}:2')


查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信