2017-03-13 88 views
1

numpy是否有方法來測試是否可以播放形狀,而無需創建數組?總之,我正在尋找一個提供以下輸出的函數。有沒有一種方法可以測試兩種形狀是否可以用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 

行爲或建立自己的邏輯。有沒有內置的東西?

回答

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 
相關問題