SciPy प्रलेखन के अंत में एक छोटी टिप्पणी है :
एक और उपयोगी कमांड है source
। जब पायथन में लिखित एक फ़ंक्शन को एक तर्क के रूप में दिया जाता है, तो यह उस फ़ंक्शन के लिए स्रोत कोड की एक सूची प्रिंट करता है। यह एक एल्गोरिथ्म के बारे में सीखने या ठीक से समझने में मददगार हो सकता है कि एक फ़ंक्शन अपने तर्कों के साथ क्या कर रहा है। पायथन कमांड डायर के बारे में भी मत भूलना, जिसका उपयोग किसी मॉड्यूल या पैकेज के नामस्थान को देखने के लिए किया जा सकता है।
मुझे लगता है कि यह किसी को सभी पैकेजों के पर्याप्त ज्ञान के साथ अलग-अलग चुनने के लिए अनुमति देगा, जो कि कुछ डरावनी और खस्ता कार्यों के बीच अंतर हैं (यह मुझे लॉगजी 10 प्रश्न के साथ बिल्कुल भी मदद नहीं करता है)। मेरे पास निश्चित रूप से वह ज्ञान नहीं है, लेकिन source
यह इंगित करता है कि scipy.linalg.solve
और numpy.linalg.solve
अलग-अलग तरीकों से लैपैक के साथ बातचीत करता है;
Python 2.4.3 (#1, May 5 2011, 18:44:23)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
>>> import scipy
>>> import scipy.linalg
>>> import numpy
>>> scipy.source(scipy.linalg.solve)
In file: /usr/lib64/python2.4/site-packages/scipy/linalg/basic.py
def solve(a, b, sym_pos=0, lower=0, overwrite_a=0, overwrite_b=0,
debug = 0):
""" solve(a, b, sym_pos=0, lower=0, overwrite_a=0, overwrite_b=0) -> x
Solve a linear system of equations a * x = b for x.
Inputs:
a -- An N x N matrix.
b -- An N x nrhs matrix or N vector.
sym_pos -- Assume a is symmetric and positive definite.
lower -- Assume a is lower triangular, otherwise upper one.
Only used if sym_pos is true.
overwrite_y - Discard data in y, where y is a or b.
Outputs:
x -- The solution to the system a * x = b
"""
a1, b1 = map(asarray_chkfinite,(a,b))
if len(a1.shape) != 2 or a1.shape[0] != a1.shape[1]:
raise ValueError, 'expected square matrix'
if a1.shape[0] != b1.shape[0]:
raise ValueError, 'incompatible dimensions'
overwrite_a = overwrite_a or (a1 is not a and not hasattr(a,'__array__'))
overwrite_b = overwrite_b or (b1 is not b and not hasattr(b,'__array__'))
if debug:
print 'solve:overwrite_a=',overwrite_a
print 'solve:overwrite_b=',overwrite_b
if sym_pos:
posv, = get_lapack_funcs(('posv',),(a1,b1))
c,x,info = posv(a1,b1,
lower = lower,
overwrite_a=overwrite_a,
overwrite_b=overwrite_b)
else:
gesv, = get_lapack_funcs(('gesv',),(a1,b1))
lu,piv,x,info = gesv(a1,b1,
overwrite_a=overwrite_a,
overwrite_b=overwrite_b)
if info==0:
return x
if info>0:
raise LinAlgError, "singular matrix"
raise ValueError,\
'illegal value in %-th argument of internal gesv|posv'%(-info)
>>> scipy.source(numpy.linalg.solve)
In file: /usr/lib64/python2.4/site-packages/numpy/linalg/linalg.py
def solve(a, b):
"""
Solve the equation ``a x = b`` for ``x``.
Parameters
----------
a : array_like, shape (M, M)
Input equation coefficients.
b : array_like, shape (M,)
Equation target values.
Returns
-------
x : array, shape (M,)
Raises
------
LinAlgError
If `a` is singular or not square.
Examples
--------
Solve the system of equations ``3 * x0 + x1 = 9`` and ``x0 + 2 * x1 = 8``:
>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> x = np.linalg.solve(a, b)
>>> x
array([ 2., 3.])
Check that the solution is correct:
>>> (np.dot(a, x) == b).all()
True
"""
a, _ = _makearray(a)
b, wrap = _makearray(b)
one_eq = len(b.shape) == 1
if one_eq:
b = b[:, newaxis]
_assertRank2(a, b)
_assertSquareness(a)
n_eq = a.shape[0]
n_rhs = b.shape[1]
if n_eq != b.shape[0]:
raise LinAlgError, 'Incompatible dimensions'
t, result_t = _commonType(a, b)
# lapack_routine = _findLapackRoutine('gesv', t)
if isComplexType(t):
lapack_routine = lapack_lite.zgesv
else:
lapack_routine = lapack_lite.dgesv
a, b = _fastCopyAndTranspose(t, a, b)
pivots = zeros(n_eq, fortran_int)
results = lapack_routine(n_eq, n_rhs, a, n_eq, pivots, b, n_eq, 0)
if results['info'] > 0:
raise LinAlgError, 'Singular matrix'
if one_eq:
return wrap(b.ravel().astype(result_t))
else:
return wrap(b.transpose().astype(result_t))
यह मेरी पहली पोस्ट भी है तो अगर मुझे यहाँ कुछ बदलना चाहिए तो कृपया मुझे बताएं।
all of those functions are available without additionally importing Numpy
क्योंकिthe intention is for users not to have to know the distinction between the scipy and numpy namespaces
। अब मुझे आश्चर्य होता है, क्योंकि मैं पदों के बारे में सुन्न और थोडा थोडा पीछे चलता हूँ और खुद इसका इस्तेमाल करता हूँ। और मैं लगभग हमेशा सुन्न आयात (np के रूप में) देखा जा रहा है। तो वे असफल रहे?