也許有人理解底層的數據結構可以優化或解釋它是否可靠/安全/良好的做法,但它似乎工作。
np.all(a==b)
Out[]: True
memoryview(a.data)==memoryview(b.data)
Out[]: True
%timeit np.all(a==b)
The slowest run took 10.82 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 6.2 µs per loop
%timeit memoryview(a.data)==memoryview(b.data)
The slowest run took 8.55 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 1.85 µs per loop
如果我理解這個正確,ndarray.data
創建一個指針到數據緩衝器和memoryview
創建本地蟒類型,可以是短路移出緩衝器。
我想。
編輯:進一步的測試表明它可能不會像所顯示的那麼大的時間改進。此前a=b=np.eye(5)
a=np.random.randint(0,10,(100,100))
b=a.copy()
%timeit np.all(a==b)
The slowest run took 6.70 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 17.7 µs per loop
%timeit memoryview(a.data)==memoryview(b.data)
10000 loops, best of 3: 30.1 µs per loop
np.all(a==b)
Out[]: True
memoryview(a.data)==memoryview(b.data)
Out[]: True
你看這個功能:https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.array_equal.html –
@Thomas :該函數在內部調用'np.all',所以它是沒用的。 (我確實希望有一個專門用於此目的的功能來做短路,但唉,它不會。) – acdr
嗯,這是一個恥辱。我猜,一個numpy內部的函數是你唯一的機會,因爲在numpy之外的任何循環幾乎肯定會變慢。你有沒有考慮直接聯繫開發者? –