जवाबों:
मतलाब उपयोगकर्ता लिंक के लिए यहां एक बहुत बेहतर (आधिकारिक) न्यूमपी है - मुझे डर है कि मैथ्यूज़ एक बहुत पुराना है।
के बराबर repmat(a, m, n)
है tile(a, (m, n))
।
यह कई आयामों के साथ काम करता है और matlab के समान परिणाम देता है। (Numpy 3 डी आउटपुट ऐरे देता है जैसा कि आप उम्मीद करेंगे - किसी कारण से matlab 2d आउटपुट देता है - लेकिन सामग्री समान है)।
Matlab:
>> repmat([1;1],[1,1,1])
ans =
1
1
अजगर:
In [46]: a = np.array([[1],[1]])
In [47]: np.tile(a, [1,1,1])
Out[47]:
array([[[1],
[1]]])
a
करके टाइल तर्क के आयाम को बढ़ावा देता है। मतलब दूसरे तरीके से काम करता दिख रहा है। इसी तरह, 4d टाइलिंग के साथ आपको दो बार newaxis की आवश्यकता होगी ... ताकि आवश्यक हो ...np.tile(a[:,newaxis,newaxis],[1,2,3,4]) = size(repmat(a,[1 2 3 4]))
ध्यान दें कि कुछ कारणों से जिन्हें आपको MATLAB के रिपीट उपयोग करने की आवश्यकता होगी, उन पर NumPy के प्रसारण तंत्र द्वारा ध्यान दिया जाता है, जो आपको समान आकार के सरणियों के साथ विभिन्न प्रकार के गणित करने की अनुमति देता है। तो अगर आप कहते हैं, एक 1600x1400x3 सरणी एक 3-रंग छवि का प्रतिनिधित्व करते हैं, तो आप प्रत्येक तत्व [1.0 0.25 0.25]
पर हरे और नीले रंग की मात्रा को कम करने के लिए इसे (मूल रूप से) गुणा कर सकते हैं । अधिक जानकारी के लिए उपरोक्त लिंक देखें।
bsxfun
।
Matlab उपयोगकर्ताओं के लिए NumPy देखें ।
Matlab:
repmat(a, 2, 3)
Numpy:
numpy.kron(numpy.ones((2,3)), a)
नम्पी में मातिलिब ( numpy.matlib.repmat () ):
numpy.matlib.repmat(a, 2, 3)
यह है कि मैं इसे समझ गया था कि चारों ओर कुछ गड़बड़ है। सही होने की खुशी और उम्मीद है कि यह मदद करता है।
मान लें कि आपके पास 2x3 तत्वों का एक मैट्रिक्स M है। इसके दो आयाम हैं, जाहिर है।
मैं मैट्रिक्स के पहले से ही आयामों के साथ इनपुट मैट्रिक्स में हेरफेर करने के लिए पूछते समय मतलब और अजगर के बीच कोई अंतर नहीं देख सका। इस प्रकार दो आज्ञा
repmat(M,m,n) % matlab
np.tile(M,(m,n)) # python
रैंक 2 (दो आयाम) के मैट्रिक्स के लिए वास्तव में बराबर हैं।
जब आप इनपुट मैट्रिक्स की तुलना में अधिक आयामों पर पुनरावृत्ति / टाइलिंग के लिए पूछते हैं तो मामले प्रति-सहज होते हैं। रैंक दो और मैट्रिक्स 2x3 के मैट्रिक्स एम पर वापस जाना, यह देखने के लिए पर्याप्त है कि आउटपुट मैट्रिक्स के आकार / आकार का क्या होता है। मान लें कि हेरफेर के लिए अनुक्रम अब 1,1,2 है।
मतलाब में
> size(repmat(M,1,1,2))
ans =
2 3 2
इसने इनपुट मैट्रिक्स के पहले दो आयामों (पंक्तियों और स्तंभों) को कॉपी किया है और दोहराया है कि एक बार एक नए तीसरे आयाम (दो बार कॉपी किया गया, वह)। repmat
दोहराए जाने वाले मैट्रिक्स के नामकरण के लिए सही है ।
पायथन में
>>> np.tile(M,(1,1,2)).shape
(1, 2, 6)
इसने एक अलग प्रक्रिया लागू की है, मैं मानता हूं, अनुक्रम (1,1,2) को मतलाब की तुलना में अलग तरीके से पढ़ा जाता है। कॉलम, पंक्तियों और आउट-ऑफ-प्लेन आयाम की दिशा में प्रतियों की संख्या को दाईं से बाईं ओर पढ़ा जा रहा है। परिणामी वस्तु का माटलब से भिन्न आकार होता है। कोई अब उस पर जोर नहीं दे सकता है repmat
और tile
समान निर्देश हैं।
tile
जैसे व्यवहार करने के लिए repmat
, पायथन में एक को यह सुनिश्चित करना होता है कि इनपुट मैट्रिक्स में उतने ही आयाम हैं जितने कि तत्व अनुक्रम में हैं। यह किया जाता है, उदाहरण के लिए, थोड़ा पूर्व शर्त करके और संबंधित वस्तु एन बनाकर
N = M[:,:,np.newaxis]
फिर, इनपुट पक्ष में एक के N.shape = (2,3,1)
बजाय M.shape = (2,3)
और आउटपुट पक्ष पर है
>>> np.tile(N,(1,1,2)).shape
(2, 3, 2)
जिसका उत्तर था size(repmat(M,1,1,2))
। मुझे लगता है कि यह इसलिए है क्योंकि हमने पायथन को इसके बाईं ओर के बजाय (2,3) के तीसरे आयाम को जोड़ने के लिए निर्देशित किया है, ताकि पायथन अनुक्रम (1,1,2) के रूप में कार्य करता है जैसा कि मतलब में इरादा था इसे पढ़ने का तरीका।
में तत्व [:,:,0]
के लिए अजगर जवाब में एन तत्व के रूप में एक ही मान शामिल होंगे (:,:,1)
के लिए Matlab जवाब एम ।
अंत में, repmat
जब कोई क्रोनकर उत्पाद का उपयोग करता है , तो मैं उसके बराबर नहीं मिल सकता
>>> np.kron(np.ones((1,1,2)),M).shape
(1, 2, 6)
जब तक कि मैं तो पूर्व शर्त एम में एन ऊपर के रूप में। इसलिए मेरा तर्क है कि आगे बढ़ने का सबसे सामान्य तरीका तरीकों का उपयोग करना है np.newaxis
।
जब हम रैंक 3 (तीन आयामों) के मैट्रिक्स L और आउटपुट मैट्रिक्स में कोई नए आयाम नहीं जोड़ने के सरल मामले पर विचार करते हैं, तो गेम ट्रिक हो जाता है । ये दो समान रूप से समान निर्देश समान परिणाम नहीं देंगे
repmat(L,p,q,r) % matlab
np.tile(L,(p,q,r)) # python
क्योंकि पंक्ति, स्तंभ, आउट-ऑफ-प्लेन दिशाएँ हैं (p, q, r) मतलब में और (q, r, p) पायथन में, जो रैंक -2 सरणियों के साथ दिखाई नहीं देता था। वहाँ, एक को सावधान रहना होगा और दो भाषाओं के साथ समान परिणाम प्राप्त करने के लिए अधिक पूर्व शर्त की आवश्यकता होगी।
मुझे पता है कि यह तर्क सामान्य रूप से ठीक नहीं हो सकता है, लेकिन मैं इसे केवल इसी से दूर कर सकता हूं। उम्मीद है कि यह अन्य साथियों को इसे कठिन परीक्षा के लिए आमंत्रित करता है।
दोनों पता tile
और repeat
।
x = numpy.arange(5)
print numpy.tile(x, 2)
print x.repeat(2)
>>> import numpy as np
>>> np.repeat(['a','b'], [2,5])
array(['a', 'a', 'b', 'b', 'b', 'b', 'b'], dtype='<U1')
>>> np.repeat([1,2], [2,5])
array([1, 1, 2, 2, 2, 2, 2])
>>> np.repeat(np.array([1,2]), [3]).reshape(2,3)
array([[1, 1, 1],
[2, 2, 2]])
>>> np.repeat(np.array([1,2]), [2,4]).reshape(3,2)
array([[1, 1],
[2, 2],
[2, 2]])
>>> np.repeat(np.matrix('1 2; 3 4'), [2]).reshape(4,2)
matrix([[1, 1],
[2, 2],
[3, 3],
[4, 4]])