के साथ अच्छी तरह से नहीं खेलता है, मैं एक numpy ndarray subclass करने की कोशिश कर रहा हूं, लेकिन मैं अन्य numpy प्रकारों जैसे मास्क किए गए सरणी या मैट्रिक्स के साथ संचालन सही करने में सक्षम नहीं हूँ। मुझे लगता है कि __array_priority__ सम्मानित नहीं किया जा रहा है।numpy सरणी से व्युत्पन्न वर्ग मैट्रिक्स और मुखौटा सरणी
import numpy as np
class C(np.ndarray):
__array_priority__ = 15.0
def __mul__(self, other):
print("__mul__")
return 42
def __rmul__(self, other):
print("__rmul__")
return 42
मेरी कक्षा और सामान्य ndarray काम के बीच संचालन की उम्मीद के रूप में: एक उदाहरण के रूप में, मैं एक डमी वर्ग कि महत्वपूर्ण पहलुओं mimicks बनाया है
>>> c1 = C((3, 3))
>>> o1 = np.ones((3, 3))
>>> print(o1 * c1)
__mul__
42
>>> print(c1 * o1)
__rmul__
42
लेकिन, जब मैं काम करने के लिए कोशिश मैट्रिक्स (या मुखौटा सरणी) के साथ सरणी प्राथमिकता का सम्मान नहीं किया जाता है।
>>> m = np.matrix((3, 3))
>>> print(c1 * m)
__mul__
42
>>> print(m * c1)
Traceback (most recent call last):
...
File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 330, in __mul__
return N.dot(self, asmatrix(other))
ValueError: objects are not aligned
मुझे ऐसा लगता है कि जिस तरह से ufuncs मैट्रिक्स और नकाबपोश सरणियों के लिए लिपटे रहे हैं सरणी प्राथमिकता का सम्मान नहीं करते। क्या यह मामला है? क्या आसपास कोई काम है?
वास्तव में, त्रुटि संदेश क्योंकि वे गठबंधन नहीं कर रहे हैं दी जाती है, 'np.matrix के बाद से ((3, 3)) '' np.asmatrix (np.ones ((3, 3)) के समान नहीं है)। हालांकि, समस्या अभी भी बनी हुई है कि 'एम * सी 1' वह काम है जो काम नहीं कर रहा है। –
@ गुस्तावर्ससन इसे ढूंढने के लिए धन्यवाद। मैंने इसे ठीक किया और प्रेरणा में और जानकारी जोड़ दी। – Hernan