มีความคิดเห็นสั้น ๆ ในตอนท้ายของการแนะนำเอกสารSciPy :
source
อีกคำสั่งที่เป็นประโยชน์ เมื่อให้ฟังก์ชันที่เขียนใน Python เป็นอาร์กิวเมนต์ฟังก์ชันจะพิมพ์รายการของซอร์สโค้ดสำหรับฟังก์ชันนั้น สิ่งนี้จะเป็นประโยชน์ในการเรียนรู้เกี่ยวกับอัลกอริทึมหรือความเข้าใจในสิ่งที่ฟังก์ชันทำกับอาร์กิวเมนต์ นอกจากนี้อย่าลืมเกี่ยวกับคำสั่ง Python ซึ่งสามารถใช้ดูเนมสเปซของโมดูลหรือแพ็คเกจ
ผมคิดว่านี่จะช่วยให้คนที่มีความรู้เพียงพอของแพ็กเกจทั้งหมดที่เกี่ยวข้องกับการที่จะเลือกกันว่าสิ่งที่แตกต่างระหว่างบาง SciPy และ numpy ฟังก์ชั่น (มันไม่ได้ช่วยฉันด้วยคำถาม log10 ที่ทั้งหมด) แน่นอนว่าฉันไม่มีความรู้นั้น แต่source
ระบุscipy.linalg.solve
และnumpy.linalg.solve
มีปฏิสัมพันธ์กับ lapack ในรูปแบบที่แตกต่างกัน
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
ตอนนี้ฉันสงสัยเพราะฉันติดตามโพสต์เกี่ยวกับ numpy และ scipy เล็กน้อยและใช้มันเอง และฉันเกือบจะเห็นว่ามีการนำเข้า numpy แยก (เป็น np) ดังนั้นพวกเขาจึงล้มเหลว?