gpt4 book ai didi

python - numpy中列表滑动的矢量化实现

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:44 25 4
gpt4 key购买 nike

从给定的 numpy 数组 [1,2,3,4] 和窗口 wz=2(每个元素之前的两个元素和每个元素之后的两个元素)我必须得到对 (中央 el,来自窗口的 el)。具有不存在元素的对可以被跳过或替换为零。所以在这个例子中我必须得到这个:

[[1., 0.]
[2., 1.]
[3., 2.]
[4., 3.]
[1., 2.]
[2., 3.]
[3., 4.]
[4., 0.]
[1., 0.]
[2., 0.]
[3., 1.]
[4., 2.]
[1., 3.]
[2., 4.]
[3., 0.]
[4., 0.]]

我的实现效率极低,看起来像:

x = np.array([1,2,3,4])
l = x.shape[0]
for i in range(1, m):
init = np.empty((x.shape[0]*2,2))
init[:,0] = np.append(x, x)
init[:l,1] = np.pad(x, (i,0), mode='constant')[:l]
init[-l:,1] = np.pad(x, (0,i), mode='constant')[-l:]
corpus.extend(init)

有人可以提供更有效的解决方案吗?在我实现的另一个简单测试数据和变体上,我得到了:

285 µs ± 19.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
379 µs ± 7.68 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

最佳答案

这是一个 Numpythonic 方法:

In [23]: a = np.array([1,2,3,4])
In [24]: arr = np.hstack((a-1, a+1, a - 2, a+ 2))
In [25]: mask = ~np.in1d(arr, a)
In [26]: arr[mask] = 0
In [27]: np.column_stack((np.tile(a, 4), arr))
Out[27]:
array([ [1, 0],
[2, 1],
[3, 2],
[4, 3],
[1, 2],
[2, 3],
[3, 4],
[4, 0],
[1, 0],
[2, 0],
[3, 1],
[4, 2],
[1, 3],
[2, 4],
[3, 0],
[4, 0]])

关于python - numpy中列表滑动的矢量化实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48966469/

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