प्रति numpy प्रलेखन के रूप में:
numpy.bincount(x, weights=None, minlength=None)
वजन: array_like, वैकल्पिक; वजन, एक्स के समान आकार की सरणी।
तो आप इस फैशन में सीधे bincount
उपयोग नहीं कर सकते जब तक कि आप किसी भी तरह x
बदल देते हैं।
संपादित करें: तो मैं ऐसा करने का थोड़ा मुश्किल तरीका आया, लेकिन जब आप बड़े सरणी में जाते हैं तो प्रदर्शन के बारे में कोई गारंटी नहीं होती है। मूल रूप से मैं लाभ उठाने का तरीका scipy विरल मैट्रिक्स दोहराया एक ही सूचकांक में प्रविष्टियों संभाल जा रहा हूँ (वे उन्हें योग):
from scipy.sparse import *
a = np.array([[1,1], [2,2], [4,4]])
ii = np.array([1, 1, 0])
ares = a.reshape((-1,),order='F')
# ares == array([1, 2, 4, 1, 2, 4])
col = np.tile(ii,(a.shape[1],))
# col == np.array([1, 1, 0, 1, 1, 0])
row = np.tile([0,1],(a.shape[0],1)).reshape((-1,),order='F')
# row == np.array([0,0,0,1,1,1])
g = coo_matrix((ares,(col,row)),shape=(2,2))
print g.todense()
अब आप अपने सटीक डेटा को यह सामान्यीकरण करने के लिए करने जा रहे हैं। मूल विचार यह है कि आप प्रत्येक डेटा पॉइंट को अपने परिणाम सरणी के सही तत्व पर मैप करना चाहते हैं और फिर स्पैस सरणी को डुप्लिकेट प्रविष्टियों को एकत्रित करने दें।
अन्यथा, यदि आप इसे हल करने के लिए लूपिंग का उपयोग करने के लिए मजबूर हैं तो मैं साइथन का उपयोग करने के लिए देखता हूं।
संपादित करें 2: किक के लिए, मैं दो अलग अलग तरीकों का समय समाप्त हो:
import numpy as np
from scipy.sparse import *
def method1():
return np.array([np.bincount(ii, r) for r in a.T]).T
def method2():
ares = a.reshape((-1,),order='F')
col = np.tile(ii,(a.shape[1],))
row = np.tile(np.arange(a.shape[1]),(a.shape[0],1)).reshape((-1,),order='F')
return coo_matrix((ares,(col,row)),shape=(np.unique(ii).size,a.shape[1])).todense()
if __name__ == '__main__':
from timeit import Timer
a = np.random.randint(0,1000,(1000000,3))
ii = np.random.randint(0,10,(a.shape[0],))
N = 100
t1 = Timer("method1()", "from __main__ import method1")
t2 = Timer("method2()", "from __main__ import method2")
print 't2/t1: %f' % (t2.timeit(N)/t1.timeit(N))
मेरी मशीन पर, method2
आदानों के आकार पर निर्भर करता है इसलिए पाशन नहीं है method1
से 3-5x के बारे में धीमी है जरूरी एक बुरा विकल्प।
क्या डिब्बे की संख्या तय है? कितने डिब्बे हैं? –
इस संदर्भ में 'sum arrays' से आपका क्या मतलब है? यह आपके वांछित परिणाम के पीछे तर्क को समझने में मदद करेगा। – JoshAdel
@ एंड्रिया: क्या आप कृपया मौखिक रूप से व्याख्या करने का प्रयास कर सकते हैं कि आप क्या लक्ष्य कर रहे हैं? चूंकि यह आपके कोड स्निपेट से वास्तव में स्पष्ट नहीं है। धन्यवाद – eat