如何定制纽比整形过程?

2024-10-08 19:19:39 发布

您现在位置:Python中文网/ 问答频道 /正文

一个简单的问题,假设我有一个形状为(1,2,H,W)的数组I,其中第二个轴是2-class的概率分布,我想把它重塑成形状为(2,H*W)的数组I_re,并保持概率分布,即第一个轴的和为1,然后对其进行一些计算以生成形状为(2,H*W)的数组{},然后用同样的方法将I转换为I_re,我想把I_re_processed改回I的相同形状,也就是(1,2,H,W),但我不知道如何在numpy中实现,因为numpy respeme似乎没有这种支持,有人能帮忙吗?在

编辑:数组是从另一个程序的某个中间层生成的,(1,2,H,W)只是两类分布的HW对(加一),我想把它改成(2,HW),这样更容易理解,更容易做进一步的计算,用I.resheme(2,HW)我可以转换I,但问题是被转换的行(2,HW)数组没有加到1,这意味着对放错了地方


Tags: 方法程序renumpy编辑数组class形状
1条回答
网友
1楼 · 发布于 2024-10-08 19:19:39

你需要提供一个具体的例子。目前的描述还不清楚。我想@Eric和我都有同样的想法:

构建一个沿第一个轴求和为1的3d数组(初始大小为1的维度只是噪波):

In [182]: x = np.arange(12).reshape(3,4)/12
In [183]: x
Out[183]: 
array([[ 0.        ,  0.08333333,  0.16666667,  0.25      ],
       [ 0.33333333,  0.41666667,  0.5       ,  0.58333333],
       [ 0.66666667,  0.75      ,  0.83333333,  0.91666667]])
In [184]: arr = np.array((x,1-x))
In [185]: arr
Out[185]: 
array([[[ 0.        ,  0.08333333,  0.16666667,  0.25      ],
        [ 0.33333333,  0.41666667,  0.5       ,  0.58333333],
        [ 0.66666667,  0.75      ,  0.83333333,  0.91666667]],

       [[ 1.        ,  0.91666667,  0.83333333,  0.75      ],
        [ 0.66666667,  0.58333333,  0.5       ,  0.41666667],
        [ 0.33333333,  0.25      ,  0.16666667,  0.08333333]]])
In [186]: arr.shape
Out[186]: (2, 3, 4)

验证此和为1:

^{pr2}$

但整形的结果仍然是1:

In [188]: arr2 = arr.reshape(2,12)
In [189]: arr2
Out[189]: 
array([[ 0.        ,  0.08333333,  0.16666667,  0.25      ,  0.33333333,
         0.41666667,  0.5       ,  0.58333333,  0.66666667,  0.75      ,
         0.83333333,  0.91666667],
       [ 1.        ,  0.91666667,  0.83333333,  0.75      ,  0.66666667,
         0.58333333,  0.5       ,  0.41666667,  0.33333333,  0.25      ,
         0.16666667,  0.08333333]])
In [190]: arr.sum(axis=0)
Out[190]: 
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])

这意味着你还有别的想法,比如对最后两个维度的求和?在这种情况下,制作一个(1,2,H,W)数组有什么意义?为什么不只是(H,W)?在

相关问题 更多 >

    热门问题