gpt4 book ai didi

python - 在包含数字和对象的数组上使用 NumPy 函数

转载 作者:太空狗 更新时间:2023-10-30 01:31:07 34 4
gpt4 key购买 nike

我有一个类似数字的类,我在其中实现了 sqrtexp 等方法,以便 NumPy 函数在它们位于 ndarrays.

class A:
def sqrt(self):
return 1.414

这在一系列这些中完美地工作:

import numpy as np
print(np.sqrt([A(), A()])) # [1.414 1.414]

显然,sqrt 也适用于纯数字:

print(np.sqrt([4, 9]))  # [2. 3.]

但是,当数字和对象混合时,这不起作用:

print(np.sqrt([4, A()]))

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-38-0c4201337685> in <module>()
----> 1 print(np.sqrt([4, A()]))

AttributeError: 'int' object has no attribute 'sqrt'

出现这种情况是因为异构数组的dtypeobject并且numpy函数通过在每个对象上调用同名方法进行广播,但是numbers没有方法用这些名字。

我该如何解决这个问题?

最佳答案

不确定效率,但作为解决方法,您可以使用通过 mapisinstance 创建的 bool 索引,然后将相同的操作应用于两个切片,更改不是 A 类的元素的类型,以便能够使用 numpy 方法。

ar = np.array([4, A(), A(), 9.])
ar_t = np.array(list(map(lambda x: isinstance(x, A), ar)))

ar[~ar_t] = np.sqrt(ar[~ar_t].astype(float))
ar[ar_t] = np.sqrt(ar[ar_t])

print(ar)
# array([2.0, 1.414, 1.414, 3.0], dtype=object)

注意:在astype中,我使用了float,但不确定它是否适合您的要求

关于python - 在包含数字和对象的数组上使用 NumPy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713010/

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