gpt4 book ai didi

python numpy数组切片

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:40 27 4
gpt4 key购买 nike

我有一个二维数组,A 是 6x6。我想取前 2 个值(索引 0,0 和 0,1)并取两者的平均值并将平均值插入一个新数组,该数组是索引 0,0 处 A (6x3) 列大小的一半.然后我会在 A 处获取接下来的两个索引,取平均值并在 0,1 处放入新数组。

我知道如何做到这一点的唯一方法是使用双 for 循环,但出于性能目的(我将使用大至 3000x3000 的数组)我知道有更好的解决方案!谢谢!

最佳答案

numpy 数组的一个非常有用的特性是它们可以以多种不同的方式重新整形和查看,通过这样做,您可以使某些操作变得非常容易。

由于您希望每两个项目配对一次,因此将 6x6 数组重新整形为 18x2 数组是有意义的:

import numpy as np

arr=np.arange(36).reshape(6,6)
print(arr)
# [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]
# [24 25 26 27 28 29]
# [30 31 32 33 34 35]]
arr2=arr.reshape(-1,2)
print(arr2)
# [[ 0 1]
# [ 2 3]
# [ 4 5]
# [ 6 7]
# [ 8 9]
# [10 11]
# [12 13]
# [14 15]
# [16 17]
# [18 19]
# [20 21]
# [22 23]
# [24 25]
# [26 27]
# [28 29]
# [30 31]
# [32 33]
# [34 35]]

现在取平均值很容易:

means=arr2.mean(axis=1)
print(means)
# [ 0.5 2.5 4.5 6.5 8.5 10.5 12.5 14.5 16.5 18.5 20.5 22.5
# 24.5 26.5 28.5 30.5 32.5 34.5]

最后,我们将数组 reshape 为 6x3:

means=means.reshape(6,-1)
print(means)
# [[ 0.5 2.5 4.5]
# [ 6.5 8.5 10.5]
# [ 12.5 14.5 16.5]
# [ 18.5 20.5 22.5]
# [ 24.5 26.5 28.5]
# [ 30.5 32.5 34.5]]

或者,作为 1-liner:

means=arr.reshape(-1,2).mean(axis=1).reshape(6,-1)

PS: reshape 是一个非常快速的操作,因为它返回的是一个 View ,而不是原始数组的副本。所有改变的只是尺寸和步幅。剩下的就是对 mean 方法的一次调用。因此,这个解决方案应该尽可能快地使用 numpy。

关于python numpy数组切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com