1. 程式人生 > >numpy陣列ndarray中的廣播broadcasting機制

numpy陣列ndarray中的廣播broadcasting機制

broadcasting廣播通常作為一個操作符,用於‘smaller’和‘larger’陣列(array)間操作。當然,不光是這種情況,因為也可以用於相同大小的陣列間,但是具有不同的形狀(shape)。只有當陣列的形狀相同或者可相容的(compatible),陣列間逐個元素(element-wise)的操作才是有效的。相同shape容易理解。那什麼是可相容呢?為了定義兩個形狀是否是可相容的,Numpy從最後開始往前逐個比較它們的維度(dimensions)大小。比較過程中,如果兩者的對應維度相同,或者其中之一(或者全是)等於1,比較繼續進行直到最前面的維度。否則,你將看到ValueError錯誤出現(如,"operands could not be broadcast together with shapes ...")。當其中之一的形狀的維度超出範圍(例如,a1 的shape=(2,3,4)而a2的shape=(3,4),當a1的2超出a2範圍),此時Numpy將會使用1進行比較(如將a2.shape替換為(1,3,4))直到另一個也超出dim範圍。一旦Numpy確定兩者的形狀是可相容的,最終結果的形狀就成了每個維度上取兩者之間最大的形狀尺寸。下面是上面描述的虛擬碼:
Inputs: array A with m dimensions; array B with n dimensions
p = max(m, n)
if m < p:
    left-pad A's shape with 1s until it also has p dimensions
else if n < p:
    left-pad B's shape with 1s until is also has p dimensions
result_dims = new list with p elements
for i in p-1 ... 0:
    A_dim_i = A.shape[i]
    B_dim_i = B.shape[i]
    if A_dim_i != 1 and B_dim_i != 1 and A_dim_i != B_dim_i:
        raise ValueError("could not broadcast")
    else:
        result_dims[i] = max(A_dim_i, B_dim_i)
下面是一些例子Example
--------------------------------------------------------------------------------------
(4, 3) (4, 3) == padding ==> == result ==> (4, 3)(3,) (1, 3)--------------------------------------------------------------------------------------(3,) (1, 1, 3) == padding ==> == result ==> (5, 4, 3)(5, 4, 3) (5, 4, 3)--------------------------------------------------------------------------------------

(5,) (1, 1, 5) == padding ==> ==> error (5 != 3)(5, 4, 3) (5, 4, 3)--------------------------------------------------------------------------------------
(5, 4, 3) (1, 5, 4, 3) == padding ==> == result ==> (6, 5, 4, 3)(6, 5, 4, 3) (6, 5, 4, 3)--------------------------------------------------------------------------------------

(5, 4, 1) == no padding needed ==> result ==> (5, 4, 3)(5, 1, 3)--------------------------------------------------------------------------------------最後再舉個例子a = np.arange(5).reshape(5,1)# a.shape == (5, 1)b = np.arange(5)# b.shape == (5,)c = a + b# b.shape 會被先擴充套件為(1, 5)# 然後最終的shape將取二者中的最大值c.shape == (5, 5)c
array([[0, 1, 2, 3, 4],
       [1, 2, 3, 4, 5],
       [2, 3, 4, 5, 6],
       [3, 4, 5, 6, 7],
       [4, 5, 6, 7, 8]])
--------------------------------------------------------------------------------------

相關推薦

numpy陣列ndarray廣播broadcasting機制

broadcasting廣播通常作為一個操作符,用於‘smaller’和‘larger’陣列(array)間操作。當然,不光是這種情況,因為也可以用於相同大小的陣列間,但是具有不同的形狀(shape)。只有當陣列的形狀相同或者可相容的(compatible),陣列間逐個元素(

Numpy學習(3):將mnist資料檔案讀入到資料結構(numpy陣列

''' 使用python解析二進位制檔案 ''' import numpy as np import struct def loadImageSet(filename): binfile = open(filename, 'rb') # 讀取二進位制檔案 buffers = bin

numpy broadcasting 廣播 機制

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

numpy broadcasting廣播機制

broadcasting,廣播,傳遞,賦值,拷貝; 一定要注意,執行 broadcast 的前提在於,兩個 ndarray 執行的是 element-wise(按位加,按位減) 的運算,而不是矩陣乘法的運算,矩陣乘法運算時需要維度之間嚴格匹配。(且矩陣乘法,np.dot(A, B) 如

Numpy廣播原則/機制

為了瞭解這個原則,首先我們來看一組例子: # 陣列直接對一個數進行加減乘除,產生的結果是陣列中的每個元素都會加減乘除這個數。 In [12]: import numpy as np In [13]: a = np.arange(1,13).reshape((4, 3

numpy和tensorflow廣播機制

廣播的引出   numpy兩個陣列的相加、相減以及相乘都是對應元素之間的操作。 import numpy as np x = np.array([[2,2,3],[1,2,3]]) y = np.array([[1,1,3],[2,2,4]]) print(x*y) #numpy當中

Tensorflow numpy 陣列 操作

  np.linspace(1, 10 , 10) 這個函式的使用是:取1到10之間的數。並且每個顯示10個數字。 引數一: 1  ----- >>> 取值的開始數字 引數二:10 ----- >>> 取值的最大值 引數三:

numpy 陣列存入mysql

    我們的專案中需要將視訊流傳入神經網路,並將神經網路處理之後的特徵存入mysql資料庫中,在查閱資料後,我發現可以使用如下方法:     首先在資料庫中建表: create table TESTBLOB(framenum int not null, feature

Pythonnumpy 陣列的切片操作

簡介 X[n0,n1]是通過 numpy 庫引用二維陣列或矩陣中的某一段資料集的一種寫法。 類似的,X[n0,n1,n2]表示取三維陣列,取N維陣列則有N個引數,N-1個逗號分隔。 以二維陣列為例: import numpy as np X = np.arra

統計numpy陣列最頻繁出現的值

arr = np.array([[1,2,100,4,5,6],[1,1,100,3,5,5],[2,2,4,4,6,6]]) 方法一: count = np.bincount(arr[:,2]) # 找出第3列最頻繁出現的值 value = np.argmax(count) 方法

numpy陣列reshape和squeeze函式的使用

參考了:http://blog.csdn.net/zenghaitao0128/article/details/78512715,作了一些自己的補充。 numpy中的reshape函式和squeeze函式是深度學習程式碼編寫中經常使用的函式,需要深入的理解。 其中,res

Python3NumPy陣列尋找特定元素下標的兩種方法

引子 Matlab中有一個函式叫做find,可以很方便地尋找陣列內特定元素的下標,即:Find indices and values of nonzero elements。 這個函式非常有用。比如,我們想計算圖1中點Q(x0, y0)拋物線的最短距離。一個

C處理Python的Numpy陣列的程式碼範例

  今天處理Python的返回值,折騰了半天,又是連蒙帶猜,找到了辦法。為了方便大家,特別提供出來。希望給其他人帶來工作上的順利。 int fext_python_action(const ImageBuffer* pImage, DataBuffer* pOutput)

【python】numpyndarray多維陣列的的運算:np.abs(x)、np.sqrt(x)、np.modf(x)等

numpy庫提供非常便捷的陣列運算,方便資料的處理。 1、陣列與標量之間可直接進行運算 In [45]: a Out[45]: array([[ 0, 1, 2, 3], [

在mongodb儲存numpy陣列

原文連結:https://cloud.tencent.com/developer/ask/32026 對於一維numpy陣列,可以使用列表: # serialize 1D array x record['feature1'] = x.tolist() # deserialize 1D ar

TensorFlow 將tensor 轉為 numpy陣列

Session.run或eval返回的任何張量都是NumPy陣列,參考程式碼如下: print(tf.Session().run(tf.constant([1,2,3,4,5,6]))) 或者 sess = tf.Session() with sess.as_default(): pri

Python開啟檔案,將list、numpy陣列內容寫入txt檔案

python儲存numpy資料:numpy.savetxt("result.txt", numpy_data); 儲存list資料:file=open('data.txt','w') file.wri

python的列表及numpy陣列排序

一、列表排序  # python中對列表排序有sort、sorted兩種方法,其中sort是列表內建方法,其幫助文件如下:In [1]: help(sorted) Help on built-in function sorted in module builtins: sorted

numpy陣列取出滿足條件的元素

例如問題:從 arr 陣列中提取所有奇數元素。 input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) output: #> array([1, 3, 5, 7, 9]) Solution: #Input &g

ctypes的運用(把一個numpy陣列傳入c

1.把一個二維陣列轉化成一維的,傳入Cvoid show_matrix(int *matrix, int rows, int columns) { int i, j; for (i=0; i<rows; i++) { for (j=0;