1. 程式人生 > >numpy中multiply函式怎麼用

numpy中multiply函式怎麼用

multiply(a,b)就是個乘法,如果a,b是兩個陣列,那麼對應元素相乘

numpy.multiply
numpy.multiply(x1, x2[, out]) = <ufunc 'multiply'>
Multiply arguments element-wise.

Parameters:
x1, x2 : array_like

Input arrays to be multiplied.

Returns:
y : ndarray

The product of x1 and x2, element-wise. Returns a scalar if
both x1 and x2 are scalars.

Notes

Equivalent to x1 * x2 in terms of array broadcasting.

Examples

>>>
>>> np.multiply(2.0, 4.0)
8.0

>>>
>>> x1 = np.arange(9.0).reshape((3, 3))
>>> x2 = np.arange(3.0)
>>> np.multiply(x1, x2)
array([[ 0., 1., 4.],
[ 0., 4., 10.],
[ 0., 7., 16.]])
為什麼上面的np.multiply(x1, x2)是這種結果,原因是multiply是ufunc函式

當我們使用ufunc函式對兩個陣列進行計算時,ufunc函式會對這兩個陣列的對應元素進行計算,因此它要求這兩個陣列有相同的大小(shape相同)。如果兩個陣列的shape不同的話,會進行如下的廣播(broadcasting)處理:

  1. 讓所有輸入陣列都向其中shape最長的陣列看齊,shape中不足的部分都通過在前面加1補齊
  2. 輸出陣列的shape是輸入陣列shape的各個軸上的最大值
  3. 如果輸入陣列的某個軸和輸出陣列的對應軸的長度相同或者其長度為1時,這個陣列能夠用來計算,否則出錯
  4. 當輸入陣列的某個軸的長度為1時,沿著此軸運算時都用此軸上的第一組值

上述4條規則理解起來可能比較費勁,讓我們來看一個實際的例子。

先建立一個二維陣列a,其shape為(6,1):

>>> a = np.arange(0, 60, 10).reshape(-1, 1)
>>> a
array([[ 0], [10], [20], [30], [40], [50]])
>>> a.shape
(6, 1)

再建立一維陣列b,其shape為(5,):
>>> b = np.arange(0, 5)
>>> b
array([0, 1, 2, 3, 4])
>>> b.shape
(5,)

計算a和b的和,得到一個加法表,它相當於計算a,b中所有元素組的和,得到一個shape為(6,5)的陣列:

>>> c = a + b
>>> c
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24],
       [30, 31, 32, 33, 34],
       [40, 41, 42, 43, 44],
       [50, 51, 52, 53, 54]])
>>> c.shape
(6, 5)

由於a和b的shape長度(也就是ndim屬性)不同,根據規則1,需要讓b的shape向a對齊,於是將b的shape前面加1,補齊為(1,5)。相當於做了如下計算:

>>> b.shape=1,5
>>> b
array([[0, 1, 2, 3, 4]])

這樣加法運算的兩個輸入陣列的shape分別為(6,1)和(1,5),根據規則2,輸出陣列的各個軸的長度為輸入陣列各個軸上的長度的最大值,可知輸出陣列的shape為(6,5)。

由於b的第0軸上的長度為1,而a的第0軸上的長度為6,因此為了讓它們在第0軸上能夠相加,需要將b在第0軸上的長度擴充套件為6,這相當於:

>>> b = b.repeat(6,axis=0)
>>> b
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])

由於a的第1軸的長度為1,而b的第一軸長度為5,因此為了讓它們在第1軸上能夠相加,需要將a在第1軸上的長度擴充套件為5,這相當於:

>>> a = a.repeat(5, axis=1)
>>> a
array([[ 0,  0,  0,  0,  0],
       [10, 10, 10, 10, 10],
       [20, 20, 20, 20, 20],
       [30, 30, 30, 30, 30],
       [40, 40, 40, 40, 40],
       [50, 50, 50, 50, 50]])

經過上述處理之後,a和b就可以按對應元素進行相加運算了。

當然,numpy在執行a+b運算時,其內部並不會真正將長度為1的軸用repeat函式進行擴充套件,如果這樣做的話就太浪費空間了

這樣,就能知道為什麼np.multiply(x1, x2)是這種結果了

相關推薦

numpymultiply函式怎麼

multiply(a,b)就是個乘法,如果a,b是兩個陣列,那麼對應元素相乘 numpy.multiplynumpy.multiply(x1, x2[, out]) = <ufunc 'multiply'>Multiply arguments element-

numpyflatten()函式用法

flatten是numpy.ndarray.flatten的一個函式,其官方文件是這樣描述的: ndarray.flatten(order='C') Return a copy of the array collapsed into one dimension. Parameters:

Python擴充套件庫numpywhere()函式的三種用法 Python擴充套件庫numpywhere()函式的三種用法

原 Python擴充套件庫numpy中where()函式的三種用法 2018年06月25日 07:43:56 Python_小屋 閱讀數:1000

Numpyargsort()函式的用法

argsort()函式的作用是將陣列按照從小到大的順序排序,並按照對應的索引值輸出。 argsort()函式中,當axis=0時,按列排列;當axis=1時,按行排列。如果省略預設按行排列。 下邊通過例子來說明其用法: #!/usr/bin/env python # -*- codi

Numpytile函式的用法

tile函式的功能是重複某個陣列,位於Numpy模組numpy.lib.shape_base中 下邊通過具體例子來說明tile函式的具體用法: 1、通過一個數字來說明重複的次數 #!/usr/bin/env python # -*- coding:utf-8 -*- from numpy

Numpysum函式的使用方法(Python自帶sum函式

Numpy中sum函式(Python自帶sum函式)的作用是對元素求和。 無參時,所有全加; axis=0,按列相加; axis=1,按行相加; 下邊通過例子來說明其用法: #!/usr/bin/env python # -*- coding:utf-8 -*-

Numpyreshape函式、reshape(1,-1)的含義(淺顯易懂,原始碼例項)

本文詳細介紹numpy中reshape函式的三種常見相關用法。 一般用法:numpy.arange(n).reshape(a, b); 依次生成n個自然數,並且以a行b列的陣列形式顯示: In [1]: np.arange(16).reshape(2,8) #生成16個

numpytakes函式

numpy.take(a, indices, axis=None, out=None, mode='raise') take(indices[, axis, out, mode]) :提取指定索引位置的資料,並以一維陣列或者矩陣返回(主要取決axis)

Python Numpyreshape函式引數-1的含義

新陣列的shape屬性應該要與原來陣列的一致,即新陣列元素數量與原陣列元素數量要相等。一個引數為-1時,那麼reshape函式會根據另一個引數的維度計算出陣列的另外一個shape屬性值。 下面來舉幾個

numpynonzero函式詳解

import numpy as np ''' nonzero() 獲取元素的行下標與列下標''' a = np.array([[1, 0, 3], [4, 5, 0]]) print(np.

Python Numpyreshape函式引數-1的含義

新陣列的shape屬性應該要與原來陣列的一致,即新陣列元素數量與原陣列元素數量要相等。一個引數為-1時,那麼reshape函式會根據另一個引數的維度計算出陣列的另外一個shape屬性值。下面來舉幾個例子來理解一下:>>> z = np.array([[1,

numpystack函式

numpy中的stack函式比較的繞,具體實現如下:----------------------------------------------------import numpy as npa=[1,2,3]b=[4,5,6]default_ab=np.stack((a,b

[Python]numpytile函式的用法

1.函式的定義與說明 tile函式是模板numpy.lib.shape_base中的函式。 函式的形式是tile(A,reps) 函式引數說明中提到A和reps都是array_like的,什麼是array_like的parameter呢?在網上查了一下,始終搞不明白,便把熟

Numpy tile函式的用法

titl函式: a=arange(1,3) #a的結果是: array([1,2]) 1,當 tile(a,1) 時: tile(a,1) #結果是 array([1,2]) tile(a,2) #結果是 array([1,2,1,2]) tile(a,3)

#Python第三方模組學習(二)——numpyloadtxt函式用法詳解

本篇系轉載文章,並在原文的基礎上補充引數delimeter的說明 umpy中有兩個函式可以用來讀取檔案,主要是txt檔案, 下面主要來介紹這兩個函式的用法 第一個是loadtxt, 其一般用法為 numpy.loadtxt(fname, dtype=, commen

numpyargsort函式用法

>>> import numpy >>> help(numpy.argsort) Help on function argsort in module numpy.core.fromnumeric: argsort(a, axis=-1, kind='quicksort',

淺述numpyargsort()函式的用法

    由於想使用python用訓練好的caffemodel來對很多圖片進行批處理分類,學習過程中,碰到了argsort函式,因此去查了相關文獻,也自己在python環境下進行了測試,大概瞭解了其相關的用處,為了怕自己後面又忘了,就寫下來權當加深理解了。(ps:我也是python小白,理解可能比較淺顯) 1

簡單介紹 numpy的聚合函式

簡單介紹 numpy中的聚合函式 使用numpy之前先匯入numpy import numpy as np np.sum() //求和 np.prod() //所有元素相乘 np.mean() //平均值 np.std() //標準差 np.var() //方差 np.medi

numpy的meshgrid函式

numpy中的meshgrid函式 2017年12月17日 20:50:46 修煉之路 閱讀數:5170更多 個人分類: numpy修煉之路 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/sinat_29957455/article/

numpy:tile函式用法

tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列,我們還是使用具體的例子來說明問題 ①先來引入numpy下的所有方法 from numpy import *