gpt4 book ai didi

python - 向量化 numpy 数组扩展

转载 作者:行者123 更新时间:2023-11-28 21:14:19 26 4
gpt4 key购买 nike

我正在尝试找到一种向量化操作的方法,我采用 1 个 numpy 数组并将每个元素扩展为 4 个新点。我目前正在用 Python 循环来做这件事。首先让我解释一下算法。

input_array = numpy.array([1, 2, 3, 4])

我想将此数组中的每个元素“扩展”或“延伸”到 4 个点。因此,元素零(值 1)将扩展为这 4 个点:

[0, 1, 1, 0]

这会发生在每个元素以最终数组结束时:

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

我想让代码稍微通用一些,这样我也可以用不同的方式执行这个“扩展”。例如:

input_array = numpy.array([1, 2, 3, 4])

这次通过向每个点添加 += .2 来扩展每个点。因此,最终数组将是:

[.8, .8, 1.2, 1.2, 1.8, 1.8, 2.2, 2.2, 2.8, 2.8, 3.2, 3.2, 3.8, 3.8, 4.2, 4.2]

我目前使用的代码如下所示。这是一种非常幼稚的方法,但似乎有一种方法可以加快大型阵列的速度:

output = []
for x in input_array:
output.append(expandPoint(x))

output = numpy.concatenate(output)

def expandPoint(x):
return numpy.array([0, x, x, 0])

def expandPointAlternativeStyle(x):
return numpy.array([x - .2, x - .2, x + .2, x + .2])

最佳答案

我不确定你的算法的逻辑,但我认为如果你想让每个点都扩展,然后将它们排在一起,你最好的方法是增加尺寸,然后取扁平版本;对于你的第一个例子:

>>> x = np.array([1,2,3,4])
>>> x
array([1, 2, 3, 4])
>>> y = np.empty((len(x), 4))
>>> y[:, [0, 3]] = 0
>>> y[:, 1:3] = x[:, None]
>>> y
array([[ 0., 1., 1., 0.],
[ 0., 2., 2., 0.],
[ 0., 3., 3., 0.],
[ 0., 4., 4., 0.]])
>>> y.reshape((4*len(x),)) # Flatten it back
array([ 0., 1., 1., 0., 0., 2., 2., 0., 0., 3., 3., 0., 0.,
4., 4., 0.])

然后你如何着手制作那个通用取决于你的算法,我不确定是否完全遵循......但这应该给你一些开始的指导。

编辑:正如其他人所说,您实际上可以以更简洁的方式对外部产品执行所有这些操作,这可能会更接近您的算法,例如,无耻地让 YXD 回答一个-类轮:

>>> (x[:, None] * np.array([0,1,1,0])[None, :]).flatten()
array([0, 1, 1, 0, 0, 2, 2, 0, 0, 3, 3, 0, 0, 4, 4, 0])

但是原则上还是先往更高的维度(2)去,再往原来的维度(1)扩展

关于python - 向量化 numpy 数组扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723947/

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