gpt4 book ai didi

python - 高效/优雅地将方法应用于对象的 numpy ndarray 或从中获取属性

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:56 24 4
gpt4 key购买 nike

python 中脚本,有 2 numpy充满对象的 ndarrays,我们称它们为 inAinB (相同 shape )。这些对象都是同一类型,并且有一个方法 calculate()和属性(property)size .

我想对每个元素应用该方法,并将结果保存在一个新数组中,我还想从每个元素中获取属性并将结果保存在一个新数组中。

注意:我已经找到实现所有这些的方法,但我认为它们可以改进。我只是不知道怎么做。

不带参数获取属性或应用方法

如果该方法不带参数或非数组参数,我找到了一种将它应用于每个元素的方法,如下所示:

f = lambda x: x.calculate()
outA = np.vectorize(f)(inA)

获取属性也是如此:

f = lambda x: x.size
outA = np.vectorize(f)(inA)

这是有效的,但它很丑(恕我直言),事实上 x IDE 未知的 lambda 函数使我不得不“盲目地”编写函数,没有智能感知(或 Spyder 等价物)的帮助。

方法的成对应用

如果该方法将另一个对象作为其参数,并且我想将其应用于 inA 中的每个元素并使用inB中的相应元素作为它的论点,我唯一能想到的就是一个可怕的循环:

out = np.ndarray(inA.shape)
for index, iA in np.ndenumerate(inA):
out[index] = iA.calculate(inB[index])

我不相信没有更好的方法来实现这一目标。

因此我的问题是:有没有办法改进这两种方法(没有双关语意)将方法应用于 ndarray 中的元素或元素对?

最佳答案

对于应用一个方法,我发现我可以做到

outA = np.vectorize(className.calculate)(inA)

并且对于一个方法的paiwise应用,我发现我可以做到

out = np.vectorize(className.calculate)(inA, inB)

因为方法的第一个参数是self

特别是对于后者,这很多更干净。

我还没有找到没有 lambda 函数的 ge 属性的方法,我猜是这样

outA = np.vectorize(lambda x: x.size)(inA)

是在 oneliner 中做到这一点的最简单/最好的方法。

关于python - 高效/优雅地将方法应用于对象的 numpy ndarray 或从中获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156706/

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