国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Numpy中的廣播原則/機制

2020-01-04 14:29:10
字體:
來源:轉載
供稿:網友

廣播的原則

如果兩個數組的后緣維度(從末尾開始算起的維度)的軸長度相符或其中一方的長度為1,則認為它們是廣播兼容的。廣播會在缺失維度和(或)軸長度為1的維度上進行。

在上面的對arr每一列減去列平均值的例子中,arr的后緣維度為3,arr.mean(0)后緣維度也是3,滿足軸長度相符的條件,廣播會在缺失維度進行。 

這里有點奇怪的是缺失維度不是axis=1,而是axis=0,個人理解是缺失維度指的是兩個arr除了軸長度匹配的維度,在上面的例子中,正好是axis=0。這塊歡迎指正 

arr.mean(0)沿著axis=0廣播,可以看作是把arr.mean(0)沿著豎直方向復制4份,即廣播的時候arr.mean(0)相當于一個shape=(4,3)的數組,數組的每一行均相同,均為arr.mean(0)

為了了解這個原則,首先我們來看一組例子:

# 數組直接對一個數進行加減乘除,產生的結果是數組中的每個元素都會加減乘除這個數。In [12]: import numpy as npIn [13]: a = np.arange(1,13).reshape((4, 3))In [14]: a * 2Out[14]: array([[ 2, 4, 6],    [ 8, 10, 12],    [14, 16, 18],    [20, 22, 24]])# 接下來我們看一下數組與數組之間的計算In [17]: b = np.arange(12,24).reshape((4,3))In [18]: bOut[18]: array([[12, 13, 14],    [15, 16, 17],    [18, 19, 20],    [21, 22, 23]])In [19]: a + bOut[19]: array([[13, 15, 17],    [19, 21, 23],    [25, 27, 29],    [31, 33, 35]])In [20]: c = np.array([1,2,3])In [21]: a+cOut[21]: array([[ 2, 4, 6],    [ 5, 7, 9],    [ 8, 10, 12],    [11, 13, 15]])In [22]: d = np.arange(10,14).reshape((4,1))In [23]: dOut[23]: array([[10],    [11],    [12],    [13]])In [24]: a + dOut[24]: array([[11, 12, 13],    [15, 16, 17],    [19, 20, 21],    [23, 24, 25]])# 從上面可以看出,和線性代數中不同的是,m*n列的m行的一維數組或者n列的一維數組也是可以計算的。

這是為什么呢?這里要提到numpy的廣播原則:

如果兩個數組的后緣維度(從末尾開始算起的維度)的軸長度相符或其中一方的長度為1,則認為它們是廣播兼容的。廣播會在缺失維度和(或)軸長度為1的維度上進行。

在上面的代碼中,a的維度是(4,3),c的維度是(1,3);d的維度是(4,1)。所以假設有兩個數組,第一個的維度是(x_1, y_1, z_1),另一個數組的維度是(x_2, y_2, z_2),要判斷這兩個數組能不能進行計算,可以用如下方法來判斷:

if z_1 == z_2 or z_1 == 1 or z_2 == 1: if y_1 == y_2 or y_1 == 1 or y_2 == 1:  if x_1 == x_2 or x_1 == 1 or x_2 == 1:   可以運算  else:   不可以運算 else:  不可以運算else: 不可以運算

這里需要注意:(3,3,2)和(3,2)是可以運算的,因為對于二維數組(3,2)也可以表示為(1,3,2),套用上述的規則是完全適用的,同理:(4,2,5,4)和(2,1,4)也是可以進行運算的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡西市| 浦北县| 翁牛特旗| 慈利县| 洞头县| 苏州市| 龙里县| 池州市| 山西省| 凌源市| 上蔡县| 马边| 荆门市| 普兰县| 谷城县| 长寿区| 安达市| 东乌珠穆沁旗| 措勤县| 涡阳县| 泸西县| 福州市| 桃园市| 永丰县| 五华县| 皮山县| 万荣县| 金山区| 团风县| 平武县| 合作市| 亚东县| 安顺市| 南漳县| 宁蒗| 乐陵市| 兰州市| 沂南县| 商洛市| 文化| 东乌|