numpy 是否有一种方法可以测试形状是否可以广播而无需创建数组?简而言之,我正在寻找一个提供以下输出的函数。
can_broadcast((1, 2), (2, 1)) # True
can_broadcast((1, 2), (2, 3)) # False
当然,我可以模拟使用
def can_broadcast(s1, s2):
try:
np.empty(s1) + np.empty(s2)
return True
except ValueError:
return False
或建立我自己的逻辑。有什么内置的吗?
AFAIK 内置函数处理数组,而不仅仅是形状。所以,我不知道有任何内置的可以解决它。这是我能想到的一个,基本上是寻找singleton
尺寸,即dimension lengths = 1
检查尺寸长度是否匹配并满足任一标准使我们True
成为broadcastable
-
def can_broadcast(s1, s2):
s1a = np.asarray(s1)
s2a = np.asarray(s2)
return ((s1a == 1) | (s2a==1) | (s2a == s1a)).all()
样品运行 -
In [335]: s1 = (1, 2, 1, 3)
...: s2 = (2, 3, 3, 3)
...: s3 = (1, 1, 3, 3)
...:
In [336]: print can_broadcast(s1, s2)
...: print can_broadcast(s1, s3)
...: print can_broadcast(s2, s3)
...:
False
True
True
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句