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
或建立我自己的逻辑。内置了什么?
答案 0 :(得分:1)
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