一个高维数组”拼接 – 堆叠 – 变尺寸”的高级使用

阿里云双11来了!从本博客参与阿里云,服务器最低只要86元/年!

发现:当我做高维数组矢量化编程时,在对各种高维数组的初始化时用到了各种数组间的拼接、堆叠、再变形的使用。这些操作都应该尽量只使用numpy或cupy自带的函数,能不用循环就不用循环!!

本文用的函数:numpy.stack、numpy.reshape

想实现的需求:9个大小相同的(1,3)数组,堆叠拼合成一个(3,3,3)大数组。


图1:想实现的拼合结果

实现如下:

import numpy as np
a = [1,11,111]; b = [2,22,222]; c = [3,33,333]
d = [4,44,444]; e = [5,55,555]; f = [6,66,666]
g = [7,77,777]; h = [8,88,888]; j = [9,99,999]
a1 = np.array( [a] ).T
b1 = np.array( [b] ).T
c1 = np.array( [c] ).T
d1 = np.array( [d] ).T
e1 = np.array( [e] ).T
f1 = np.array( [f] ).T
g1 = np.array( [g] ).T
h1 = np.array( [h] ).T
j1 = np.array( [j] ).T
r = np.stack( (a1,b1,c1,d1,e1,f1,g1,h1,j1), axis=1 ).reshape(3,3,3)
# 结果:
array([[[  1,   2,   3],
        [  4,   5,   6],
        [  7,   8,   9]],
       [[ 11,  22,  33],
        [ 44,  55,  66],
        [ 77,  88,  99]],
       [[111, 222, 333],
        [444, 555, 666],
        [777, 888, 999]]])

对numpy.stack的使用说明:该函数的关键点在于axis的数值选择。当原始小数组为二维时:

  • axis = 1:提取待合并数组”每一行“,拼凑成一个二维数组;有”几行“就拼成”几页“;
  • axis = 2:提取待合并数组”每一列“,拼凑成一个二维数组;有”几列“就拼成”几页“;
  • axis = 0:单纯把待合并数组,按页依次拼接而已。

因此,本例完全可以用axis = 2来实现,只不过稍作改变:

a = [1,11,111]; b = [2,22,222]; c = [3,33,333]
d = [4,44,444]; e = [5,55,555]; f = [6,66,666]
g = [7,77,777]; h = [8,88,888]; j = [9,99,999]
a1 = np.array( [a] )
b1 = np.array( [b] )
c1 = np.array( [c] )
d1 = np.array( [d] )
e1 = np.array( [e] )
f1 = np.array( [f] )
g1 = np.array( [g] )
h1 = np.array( [h] )
j1 = np.array( [j] )
r = np.stack( (a1,b1,c1,d1,e1,f1,g1,h1,j1), axis=2 ).reshape(3,3,3)
# 结果:
array([[[  1,   2,   3],
        [  4,   5,   6],
        [  7,   8,   9]],
       [[ 11,  22,  33],
        [ 44,  55,  66],
        [ 77,  88,  99]],
       [[111, 222, 333],
        [444, 555, 666],
        [777, 888, 999]]])

补充:

  • 例子中的reshape作用非常明显,如果没用reshape将数组变形,根据numpy.stack函数的定义,方式1或方式2拼合后得到的、原始的、单位二维数组尺寸为(1,9)或(9,1);因此用reshape可将其重排为我们想要的(3,3);
  • 本例中想要实现的需求,是我在实际任务中遇到的;其实”numpy.stack + reshape“函数理论上应该可以满足更加复杂的、”维度提高“的数组拼合需要!
  • 其他的简单数组拼合还有:
    np.hstack、np.vstack、np.column_stack、np.row_stack等,但都无法提高维度!!!

https://www.jianshu.com/p/23b8af58cb96

Python量化投资网携手4326手游为资深游戏玩家推荐:《神都相逢,同享全世界的美《神都夜行录》x屈臣氏线下活动回顾!

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
Python
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论