在我看來,有numpy的功能multiply()
的兩個版本:乘()在numpy的蟒蛇
c = multiply(a, b)
multiply(a, b, c)
我的問題是雙重的:
- 這兩個版本有什麼區別?
- 我需要使用
dot()
函數,並且我知道c = dot(a, b)
的作品。但是dot(a, b, c)
沒有。
在我看來,有numpy的功能multiply()
的兩個版本:乘()在numpy的蟒蛇
c = multiply(a, b)
multiply(a, b, c)
我的問題是雙重的:
dot()
函數,並且我知道c = dot(a, b)
的作品。但是dot(a, b, c)
沒有。的multiply()
的兩個版本之間的差別:
c = multilpy(a, b)
乘以陣列a
和b
逐元素,創建一個新陣列作爲結果。名稱c
綁定到這個新的數組。如果c
之前指向另一個數組,則這可能會或可能不會觸發之前指向的數組c
的垃圾回收,具體取決於對此數組的其他引用是否仍然存在。
multilpy(a, b, c)
乘以陣列a
和b
逐元素,並將結果存儲在現有陣列c
(它必須具有適當的尺寸)英寸沒有創建新的數組對象,而是改變了現有的數組。除了不同的語義之外,如果c
已經指向適當類型和維度的數組,則此變體更快,因爲沒有分配新數組。這種變體還可以減少內存使用量。其實不是問題。是的,dot()
沒有三參數表單。它不是一個ufunc,也不遵循通常的廣播規則 - 它不能因爲點積的語義。
編輯:從NumPy 1.6開始,dot()
實際上確實有一個三參數形式,其語義與上述相似。 (對於它的價值,它仍然不是一個ufunc。)
目前所有的標準numpy的ufuncs的只有一個版本 - 使用點作爲一個例子
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function dot>
Namespace: Interactive
Docstring:
dot(a, b, out=None)
Dot product of two arrays.
For 2-D arrays it is equivalent to matrix multiplication, and for 1-D
arrays to inner product of vectors (without complex conjugation). For
N dimensions it is a sum product over the last axis of `a` and
the second-to-last of `b`::
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
Parameters
----------
a : array_like
First argument.
b : array_like
Second argument.
out : ndarray, optional
Output argument. This must have the exact kind that would be returned
if it was not used. In particular, it must have the right type, must be
C-contiguous, and its dtype must be the dtype that would be returned
for `dot(a,b)`. This is a performance feature. Therefore, if these
conditions are not met, an exception is raised, instead of attempting
to be flexible.
如果您提供正確的dtype和存儲順序的可選第三個agrument,它將工作:
In [78]: a=np.array([1.,2.,3.,4.])
In [79]: b=np.diag(a)
In [80]: c=np.empty_like(a)
In [81]: np.dot(a,b,c)
Out[81]: array([ 1., 4., 9., 16.])
In [82]: np.dot(a,b)
Out[82]: array([ 1., 4., 9., 16.])
非常感謝。 –