043、数组广播机制
本文最后更新于 67 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

数组广播机制

数组支持广播机制,支持对一些形状不同但满足一定条件的多个数组进行一些二元操作:

import numpy as np

数组形状相同的情况:

a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0, 2.0, 2.0])
a.shape
(3,)
b.shape
(3,)

也有两个不同维度操作的例子,如数组的数乘:

c = 2.0
a * c
array([2., 4., 6.])
np.shape(c)
()

再看一个更复杂的例子:

a = np.array([
    [0, 0, 0],
    [10, 10, 10],
    [20, 20, 20],
    [30, 30, 30],
])
b = np.array([
    [0, 1, 2],
    [0, 1, 2],
    [0, 1, 2],
    [0, 1, 2],
])
a + b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

b的形状改为(3,)的一维数组:

b = np.array([0, 1, 2])
b.shape
(3,)
a.shape
(4, 3)

此时,加法仍然成立:

a + b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

再将a的形状修改为一个(4,1)的数组:

a = np.array([0, 10, 20, 30])
a.shape = 4, 1
a
array([[ 0],
       [10],
       [20],
       [30]])
b.shape
(3,)

此时,加法依然成立:

a + b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

在上面的例子中,两个数组的形状虽然不一样,但是加法操作仍然适用。这是由于NumPy数组存在广播机制(Broadcasting)导致的。

在广播机制下,当两个数组进行二元操作时,NumPy会对它们的形状进行检查,如果两个数组形状匹配,NumPy会按照一定的规则将它们变成两个形状相同的数组,再进行相应的二元操作。

在广播机制中,两个数组的匹配规则如下:

  • 规则1:两个数组的形状完全一致。
  • 规则2:两个数组的维度一样,对应的维度大小相同,或者其中一个大小为1。
  • 规则3:两个数组的维度个数不同时,在低维数组前增加大小为1的维度直到与高维数组维度相等,然后应用前两个规则判断。

匹配成功后,结果数组每个维度的大小取两个数组对应维度大小较大的一个。利用广播机制,不难解释上面例子中的运算过程:

形状相同的加法:

a:4×3
b:4×3

规则1适用。

只改b的加法:

a:4×3
b:  3

先根据规则3,将b扩展成(1,3),再根据规则2匹配成功。

再改a的加法:

a:4×1
b:  3

先根据规则3,将b扩展成(1,3),再根据规则2匹配成功。

更复杂的例子:

a   :3d array - 256 x 256 x 3   
b   :1d array -             3
res :3d array - 256 x 256 x 3
a   :4d array - 8 x 1 x 6 x 1
b   :3d array -     7 x 1 x 5
res :3d array - 8 x 7 x 6 x 5
a   :2d array - 4 x 1   
b   :1d array -     3
res :2d array - 4 x 3
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇