np.sum和sum區別、np.tile()、np.clip()、np.outer()、np.dot()和np.multiply()和np.matmul()和 * 的區別

一、np.sum()和sum的區別
如果只用sum()的話,表示的是數組中對應維度上的數相加,得到的是比原始數組少一維的數組。
如果寫 np.sum() 的話,表示一個數組中的維數和列數上的所有數都加在一起,得到的是一個數值。

二、np.tile()
b = tile(a,(m,n)): 即是把a數組裏面的元素複製n次放進一個數組c中,然後再把數組c複製m次放進一個數組b中,通俗地講就是將a在行方向上覆制m次,在列方向上覆制n次。
也就是生成一個元素爲a,m行n列的數組。

三、np.clip()
b = clip(a, a_min, a_max, out=None)
將數組a中的所有數限定到範圍a_min和a_max中,即a中所有比a_min小的數都會強制變爲a_min,a中所有比a_max大的數都會強制變爲a_max.
其中,a_min和a_max即可以是一個數值,也可以是和a相同形狀的一個數組,這個時候是對應元素進行比較。

Examples
    --------
    >>> a = np.arange(10)
    >>> np.clip(a, 1, 8)
    array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> np.clip(a, 3, 6, out=a)
    array([3, 3, 3, 3, 4, 5, 6, 6, 6, 6])
    >>> a = np.arange(10)
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> np.clip(a, [3, 4, 1, 1, 1, 4, 4, 4, 4, 4], 8)
    array([3, 4, 2, 3, 4, 5, 6, 7, 8, 8])

參考鏈接:clip()函數

四、np.outer()
對於多維向量,全部展開變爲一維向量
第一個參數表示倍數,使得第二個向量每次變爲幾倍。
第一個參數確定結果的行,第二個參數確定結果的列
示例:

import numpy as np
x1 = [1,2,3]
x2 = [4,5,6]
outer = np.outer(x1,x2)
print outer

x1 = [[1,2],[3,4]]
x2 = [[1,1],[1,1]]
outer = np.outer(x1,x2)
print outer

結果顯示:
[[ 4  5  6]       #1倍
 [ 8 10 12]       #2倍
 [12 15 18]]      #3倍

[[1 1 1 1]        #1倍
 [2 2 2 2]        #2倍
 [3 3 3 3]        #3倍
 [4 4 4 4]]       #4倍


五、np.dot(),np.multiply(),np.matmul(),* 的區別

1、對於矩陣(matrix)而言
np.multiply() 是對應元素相乘,
而 * 、np.matmul() 函數 與 np.dot()函數 相當於矩陣乘法(矢量積),對應的列數和行數必須滿足乘法規則;
如果希望以數量積的方式進行,則必須使用 np.multiply() 函數.

2、對於數組(Array)而言,
np.multiply 和 * 均表示的是數量積(即對應元素的乘積),
np.matmul()與np.dot()表示的是矢量積(即矩陣乘法),一維時計算內積。

綜上可知,
在想計算點乘時,使用函數np.multiply(),
在想計算矩陣乘法時使用函數np.dot(),
通常不會引起錯誤。
參考鏈接:各種乘法區別~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章