np.apply_along_axis
वास्तव में आपकी मदद नहीं करेगा, क्योंकि आप दो सरणी से अधिक पुन: प्रयास करने की कोशिश कर रहे हैं। प्रभावी रूप से, आपको here वर्णित अनुसार लूप का उपयोग करना होगा।
अब, यदि आपके सर छोटे हैं, तो लूप ठीक हैं, लेकिन यदि एन और पी बड़े हैं, तो आप शायद इसके बजाय घूमने के लिए एफएफटी का उपयोग करना चाहते हैं।
हालांकि, अगर आप उचित रूप से शून्य पैड अपने सरणियों पहले करने की जरूरत है, ताकि आपके "पूर्ण" घुमाव की उम्मीद आकार:
M, N, P = 4, 10, 20
A = np.random.randn(M, N)
B = np.random.randn(M, P)
A_ = np.zeros((M, N+P-1), dtype=A.dtype)
A_[:, :N] = A
B_ = np.zeros((M, N+P-1), dtype=B.dtype)
B_[:, :P] = B
A_fft = np.fft.fft(A_, axis=1)
B_fft = np.fft.fft(B_, axis=1)
C_fft = A_fft * B_fft
C = np.real(np.fft.ifft(C_fft))
# Test
C_test = np.zeros((M, N+P-1))
for i in range(M):
C_test[i, :] = np.convolve(A[i, :], B[i, :], 'full')
assert np.allclose(C, C_test)
उनका कहना है कि बाहर के लिए धन्यवाद। 'वजन' तर्क, हालांकि, 1-डी होना चाहिए। यह मेरे मामले में 2-डी है। – Paul
@ पॉल: संदर्भ क्या है? वजन क्या हैं, बी? – Benjamin
ए में प्रत्येक पंक्ति बी में इसी पंक्ति द्वारा फ़िल्टर की जा रही है। मैं इसे इस तरह कार्यान्वित कर सकता हूं, बस सोचा कि एक तेज़ तरीका हो सकता है। ए आकार में 10 गीगाबाइट के क्रम में है और मैं ओवरलैप-एड का उपयोग करता हूं। – Paul