首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

stack and axis

这里是矩阵的一些变换,因为涉及到处理图像处理,有RGB三通道,需要对3个矩阵进行操作,所以有3个矩阵的变化,所有stack和axis的概念,刚开始可能有点烧脑,但是多理解几遍就知道什么意思,即使你说不清楚,但至少懂得怎么变换。下面是一些例子,

a = np.arange(1, 7).reshape((2,3))

print(type(a))

b = np.arange(11, 17).reshape((2, 3))

c = np.arange(21, 27).reshape((2, 3))

d = np.arange(31, 37).reshape((2, 3))

print('a = \n', a)

print('b = \n', b)

print('c = \n', c)

print('d = \n', d)

a =

[[1 2 3]

[4 5 6]]

b =

[[11 12 13]

[14 15 16]]

c =

[[21 22 23]

[24 25 26]]

d =

[[31 32 33]

[34 35 36]]

print('axis = 0 ', s.shape, '\n', s)

s= np.stack((a, b, c, d), axis=0)

axis= 0 (4, 2, 3)

[[[ 1 2 3]

[ 4 5 6]]

[[11 12 13]

[14 15 16]]

[[21 22 23]

[24 25 26]]

[[31 32 33]

[34 35 36]]]

s = np.stack((a, b, c, d), axis=1)

print('axis = 1 ', s.shape, '\n', s)

axis =1 (2, 4, 3)

[[[ 1 2 3]

[11 12 13]

[21 22 23]

[31 32 33]]

[[ 4 5 6]

[14 15 16]

[24 25 26]

[34 35 36]]]

s = np.stack((a, b, c, d), axis=2)

print('axis = 2 ', s.shape, '\n', s)

axis= 2 (2, 3, 4)

[[[ 1 11 21 31]

[ 2 12 22 32]

[ 3 13 23 33]]

[[ 4 14 24 34]

[ 5 15 25 35]

[ 6 16 26 36]]]

a = np.arange(1, 10).reshape(3,3)

print(a)

[[1 23]

[4 5 6]

[7 8 9]]

b = a + 10

print(b)

[[1112 13]

[14 15 16]

[17 18 19]]

print(np.dot(a, b) #矩阵乘法

[[90 96 102]

[216 231 246]

[342 366 390]]

print(a * b) #按位乘法

[[ 11 24 39]

[ 56 75 96]

[119 144 171]]

a = np.arange(1, 10)

print(a)

[12 3 4 5 6 7 8 9]

b =np.arange(20,25)

print(b)

[20 21 22 23 24]

print(np.concatenate((a, b))) #数据相连

[ 1 2 3 4 5 6 7 8 9 20 21 22 23 24]

综上的例子,stack这个词就不要过多理解,语义上面是堆栈的意思,其实在Python中就当是个多维数组的变换函数(或者说是个数组的结合函数,结合的结果就是和axis有关),其实具体的功能体现还是得理解这个axis的含义。 axis的值是代表数组结合的时候,数据提取及组合的层次。别急,按上面的例子,3个数组进行结合变换,

当axis=0,代表取每个数组最高纬度的一层,就是数字自己本身,什么都不用变,把3个数组塞进一个新的数组就行了。

当axis=1,代表取每个数组元素的第二层,提取出来之后把每个数组的第二层元素组合成一个新数组。

当axis=2,代表取每个数组元素的第三层,提取出来之后把每个数组的第三层元素组合成一个新数组。

因为每个数组的层次是有限的,所以axis的数值也是有限的。比如上述例子的axis最大只能是2。但是这个层次怎么理解,其实就是把一个多维数组进行拆分知道最细颗粒级别,到不可再拆分的时候,axis就到极限值了,一般都不会大,多数都是5以内吧。如图这样,

0层就是外围最大的一层,计算方法也是把个数组直接排列在一起就行了。

1层就是0层下一层的具体元素,这里是一个一维数组。

2层就是1层的下一层具体元素,这里是1,4,7 ,已经是最具体的数字了,不能在下一层拆分了,随意axis最大就是2了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180202G1FQYD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券