以下是一種使用==
運營商的廣播方法。
首先創建一個測試數組。
In [27]: np.random.seed(1)
In [28]: a = np.random.choice(list("AABC"), size=(3,9))
In [29]: a
Out[29]:
array([['A', 'C', 'A', 'A', 'C', 'A', 'C', 'A', 'C'],
['A', 'A', 'A', 'A', 'C', 'A', 'A', 'B', 'A'],
['B', 'A', 'B', 'A', 'B', 'A', 'C', 'A', 'B']],
dtype='|S1')
將每個元素與其列頂部的元素進行比較。第一排是a[0]
;它是一個1d數組(形狀是(9,))。當我們使用==
這樣的兩個數組時,a[0]
被「廣播」爲具有形狀(3,9)的數組,充滿第一行的副本。
In [30]: a == a[0]
Out[30]:
array([[ True, True, True, True, True, True, True, True, True],
[ True, False, True, True, True, True, False, False, False],
[False, False, False, True, False, True, True, True, False]], dtype=bool)
沿着比較結果的第一個軸使用all
。
In [31]: np.all(a == a[0], axis=0)
Out[31]: array([False, False, False, True, False, True, False, False, False], dtype=bool)
偉大的'矢量化'解決方案!這就是我一直在尋找的,謝謝! – huckleg