मुझे लगता है कि यह np.sum() के कार्यान्वयन में है।
IPython साथ
import numpy as np
A = np.random.standard_normal((10000,10000))
C = np.array(A, order='C')
F = np.array(A, order='F')
बेंचमार्किंग: उदाहरण के लिए:
In [7]: %timeit C.sum(axis=0)
10 loops, best of 3: 101 ms per loop
In [8]: %timeit C.sum(axis=1)
10 loops, best of 3: 149 ms per loop
In [9]: %timeit F.sum(axis=0)
10 loops, best of 3: 149 ms per loop
In [10]: %timeit F.sum(axis=1)
10 loops, best of 3: 102 ms per loop
तो यह बिल्कुल विपरीत व्यवहार कर रहा है के रूप में उम्मीद। लेकिन आइए कुछ अन्य फ़ंक्शन आज़माएं:
In [17]: %timeit np.amax(C, axis=0)
1 loop, best of 3: 173 ms per loop
In [18]: %timeit np.amax(C, axis=1)
10 loops, best of 3: 70.4 ms per loop
In [13]: %timeit np.amax(F,axis=0)
10 loops, best of 3: 72 ms per loop
In [14]: %timeit np.amax(F,axis=1)
10 loops, best of 3: 168 ms per loop
निश्चित रूप से, यह संतरे सेब है। लेकिन np.amax() धुरी के साथ काम करता है जैसा कि योग करता है और प्रत्येक पंक्ति/कॉलम के लिए एक तत्व के साथ वेक्टर देता है। और जैसा व्यवहार करेगा उतना व्यवहार करेगा।
In [25]: C.strides
Out[25]: (80000, 8)
In [26]: F.strides
Out[26]: (8, 80000)
हमें बताता है कि सरणियों वास्तव में रो-आदेश और कॉलम-क्रम में पैक किया जाता है और उस दिशा में पाशन बहुत तेजी से होना चाहिए। उदाहरण के लिए जब तक राशि प्रत्येक पंक्ति को पंक्ति से जोड़ती है क्योंकि यह कॉलम के साथ कॉलम योग (अक्ष = 0) प्रदान करने के लिए यात्रा करती है। लेकिन .pyd के अंदर peeking के मतलब के बिना मैं सिर्फ अनुमान लगा रहा हूँ।
संपादित करें:
percusse लिंक से: http://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.reduce.html
, एक के बाद एक के आयाम को कम कर देता एक धुरी के साथ ufunc लगाने से।
a.shape = (N_0, ..., N_i, ..., N_ {M-1}) दें। फिर ufunc.reduce (ए, अक्ष = i) [k_0, .., k_ {i-1}, k_ {i + 1}, .., k_ {m-1}] = पुनरावृत्त जे के परिणामस्वरूप परिणाम (N_i), संचयी प्रत्येक को ufunc लागू करने के एक [k_0, .., k_ {i-1}, जे, k_ {i + 1}, .., k_ {एम -1}]
तो (अक्ष = 0) स्यूडोकोड में, F.sum बुला जब:
for j=cols #axis=0
for i=rows #axis=1
sum(j,i)=F(j,i)+sum(j-1,i)
तो यह वास्तव में पंक्ति पर पुनरावृति होगी जब स्तंभ राशि की गणना, स्तंभ-प्रमुख के क्रम में काफी धीमा है। इस तरह के व्यवहार में अंतर की व्याख्या होगी।
एरिक का लिंक हमें कार्यान्वयन के साथ प्रदान करता है, किसी कारण के लिए पर्याप्त मात्रा में कोड के माध्यम से जाने के लिए उत्सुक है।
आप यह कर रहे हैं लेकिन पायथन का उपयोग कर ... क्या कुछ अनुकरण नहीं है? –
इसे सत्यापित नहीं कर सकता। मेरे लिए, 'b.sum (अक्ष = 0)' 2.51s है और 'c.sum (अक्ष = 0)' 0.14s – Daniel
'numpy' का कौन सा संस्करण आप उपयोग कर रहे हैं? – romeric