numpy
सरणियों की एक विनिर्देश, निर्दिष्ट करने matplotlib
डेटा की साजिश रचने के लिए विशिष्ट विचार करें:दो सरणी बिना, अंधाकार के बिना, numpy में?
t = np.arange(0.0,1.5,0.25)
s = np.sin(2*np.pi*t)
असल में, इस सरणी t
में हमारे (x,y)
डेटा बिंदुओं के x
निर्देशांक संग्रहीत करता है; और परिणामी y
समन्वय (y = f (x) का परिणाम, इस मामले में sin(x)
) सरणी s
में।
for x, y in np.nditer([t,s]):
print("xy: %f:%f" % (x,y))
तो, मैं निम्नलिखित स्निपेट कोशिश कर रहा हूँ: तो फिर, यह numpy.nditer
समारोह का उपयोग करने के t
और s
में प्रविष्टियों की क्रमागत जोड़ी प्राप्त करने के लिए के रूप में प्रतिनिधित्व करने (x,y)
एक डेटा बिंदु के समन्वय, बहुत सुविधाजनक है test.py
के रूप में:
import numpy as np
print("numpy version {0}".format(np.__version__))
t = np.arange(0.0,1.5,0.25) ; print("t", ["%+.2e"%i for i in t])
s = np.sin(2*np.pi*t) ; print("s", ["%+.2e"%i for i in s])
print("i", ["% 9d"%i for i in range(0, len(t))])
for x, y in np.nditer([t,s]):
print("xy: %f:%f" % (x,y))
... और परिणाम हैं:
$ python3.2 test.py
numpy version 1.7.0
t ['+0.00e+00', '+2.50e-01', '+5.00e-01', '+7.50e-01', '+1.00e+00', '+1.25e+00']
s ['+0.00e+00', '+1.00e+00', '+1.22e-16', '-1.00e+00', '-2.45e-16', '+1.00e+00']
i [' 0', ' 1', ' 2', ' 3', ' 4', ' 5']
xy: 0.000000:0.000000
xy: 0.250000:1.000000
xy: 0.500000:0.000000
xy: 0.750000:-1.000000
xy: 1.000000:-0.000000
xy: 1.250000:1.000000
$ python2.7 test.py
numpy version 1.5.1
('t', ['+0.00e+00', '+2.50e-01', '+5.00e-01', '+7.50e-01', '+1.00e+00', '+1.25e+00'])
('s', ['+0.00e+00', '+1.00e+00', '+1.22e-16', '-1.00e+00', '-2.45e-16', '+1.00e+00'])
('i', [' 0', ' 1', ' 2', ' 3', ' 4', ' 5'])
Traceback (most recent call last):
File "test.py", line 10, in <module>
for x, y in np.nditer([t,s]):
AttributeError: 'module' object has no attribute 'nditer'
आह - यह पता चला है कि the iterator object nditer, introduced in NumPy 1.6, मेरे पायथन 2.7 स्थापना के numpy
संस्करण में उपलब्ध नहीं है।
तो, के रूप में मैं भी उस विशेष संस्करण का समर्थन करना चाहते हैं, मैं बड़ा numpy
के लिए काम एक तरह से खोजने की जरूरत चाहते हैं - लेकिन मैं था अभी भी सिर्फ for x,y in somearray
को निर्दिष्ट, और निर्देशांक में सीधे प्राप्त करने की सुविधा की तरह सूचित करते रहना।
कुछ numpy
प्रलेखन के साथ के बारे में खिलवाड़ के बाद, मैं इस getXyIter
समारोह के साथ आया था:
import numpy as np
print("numpy version {0}".format(np.__version__))
t = np.arange(0.0,1.5,0.25) ; print("t", ["%+.2e"%i for i in t])
s = np.sin(2*np.pi*t) ; print("s", ["%+.2e"%i for i in s])
print("i", ["% 9d"%i for i in range(0, len(t))])
def getXyIter(inarr):
if np.__version__ >= "1.6.0":
return np.nditer(inarr.tolist())
else:
dimensions = inarr.shape
xlen = dimensions[1]
xinds = np.arange(0, xlen, 1)
return np.transpose(np.take(inarr, xinds, axis=1))
for x, y in getXyIter(np.array([t,s])):
print("xyIt: %f:%f" % (x,y))
for x, y in np.nditer([t,s]):
print("xynd: %f:%f" % (x,y))
... जो ठीक
$ python2.7 test.py
numpy version 1.5.1
('t', ['+0.00e+00', '+2.50e-01', '+5.00e-01', '+7.50e-01', '+1.00e+00', '+1.25e+00'])
('s', ['+0.00e+00', '+1.00e+00', '+1.22e-16', '-1.00e+00', '-2.45e-16', '+1.00e+00'])
('i', [' 0', ' 1', ' 2', ' 3', ' 4', ' 5'])
xyIt: 0.000000:0.000000
xyIt: 0.250000:1.000000
xyIt: 0.500000:0.000000
xyIt: 0.750000:-1.000000
xyIt: 1.000000:-0.000000
xyIt: 1.250000:1.000000
Traceback (most recent call last):
File "test.py", line 23, in <module>
for x, y in np.nditer([t,s]):
AttributeError: 'module' object has no attribute 'nditer'
$ python3.2 test.py
numpy version 1.7.0
t ['+0.00e+00', '+2.50e-01', '+5.00e-01', '+7.50e-01', '+1.00e+00', '+1.25e+00']
s ['+0.00e+00', '+1.00e+00', '+1.22e-16', '-1.00e+00', '-2.45e-16', '+1.00e+00']
i [' 0', ' 1', ' 2', ' 3', ' 4', ' 5']
xyIt: 0.000000:0.000000
xyIt: 0.250000:1.000000
xyIt: 0.500000:0.000000
xyIt: 0.750000:-1.000000
xyIt: 1.000000:-0.000000
xyIt: 1.250000:1.000000
xynd: 0.000000:0.000000
xynd: 0.250000:1.000000
xynd: 0.500000:0.000000
xynd: 0.750000:-1.000000
xynd: 1.000000:-0.000000
xynd: 1.250000:1.000000
मेरा प्रश्न है काम करने के लिए लगता है - इस तरह से है , इस तरह के पुनरावृत्ति को numpy < 1.6.0 के संस्करणों में किया जाना चाहिए?