为了账号安全,请及时绑定邮箱和手机立即绑定

将向量排列成矩阵的向量化方法(numpy)

将向量排列成矩阵的向量化方法(numpy)

qq_花开花谢_0 2021-05-30 02:20:35
我有4个相同维数的向量(例如3)a= [1, 5, 9]b= [2, 6, 10]c= [3, 7, 11]d= [4, 8, 12]我想用 numpy 做的是创建一个具有这种结构的尺寸为 3x2x2 的矩阵所以结果矩阵将是这样的[[[1, 2],[3,4]],[[5, 6],[7,8]],[[9, 10],[11,12]],]我知道使用 for 循环很容易,但我正在寻找一种矢量化方法。提前致谢
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

np.reshape() 会做的:

np.reshape(np.array([a,b,c,d]).T,[3,2,2])

将产生期望的结果。


查看完整回答
反对 回复 2021-06-01
?
ibeautiful

TA贡献1993条经验 获得超5个赞

np.stack 是用于以各种顺序组合数组(或在本例中为列表)的方便工具:


In [74]: a= [1, 5, 9]

    ...: b= [2, 6, 10]

    ...: c= [3, 7, 11]

    ...: d= [4, 8, 12]

    ...: 

    ...:

没有轴参数的默认值是np.array,添加新的初始尺寸:


In [75]: np.stack((a,b,c,d))

Out[75]: 

array([[ 1,  5,  9],

       [ 2,  6, 10],

       [ 3,  7, 11],

       [ 4,  8, 12]])

但订单不是你想要的。让我们试试axis=1:


In [76]: np.stack((a,b,c,d),1)

Out[76]: 

array([[ 1,  2,  3,  4],

       [ 5,  6,  7,  8],

       [ 9, 10, 11, 12]])

订单看起来不错。现在添加一个重塑:


In [77]: np.stack((a,b,c,d),1).reshape(3,2,2)

Out[77]: 

array([[[ 1,  2],

        [ 3,  4]],


       [[ 5,  6],

        [ 7,  8]],


       [[ 9, 10],

        [11, 12]]])

另一种方法是加入列表,重塑和转置:


In [78]: np.array([a,b,c,d])

Out[78]: 

array([[ 1,  5,  9],

       [ 2,  6, 10],

       [ 3,  7, 11],

       [ 4,  8, 12]])

In [79]: _.reshape(2,2,3)

Out[79]: 

array([[[ 1,  5,  9],

        [ 2,  6, 10]],


       [[ 3,  7, 11],

        [ 4,  8, 12]]])

In [80]: _.transpose(2,1,0)

Out[80]: 

array([[[ 1,  3],

        [ 2,  4]],


       [[ 5,  7],

        [ 6,  8]],


       [[ 9, 11],

        [10, 12]]])

In [81]: __.transpose(2,0,1)

Out[81]: 

array([[[ 1,  2],

        [ 3,  4]],


       [[ 5,  6],

        [ 7,  8]],


       [[ 9, 10],

        [11, 12]]])

我们可以尝试对此进行系统化,但我发现尝试各种替代方案是有益的。


查看完整回答
反对 回复 2021-06-01
  • 2 回答
  • 0 关注
  • 571 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号