0

我有形状为 3x3x3 的 numpy 整数数组“A”(例如):

[[[***0***,1,0], [1,1,0], [0,1,1]]

[[***1***,1,0], [0,1,1], [0,0,1]]

[[***0***,1,0], [1,0,0], [1,0,0]]]

另一个具有相同形状的浮点数组“B”:

[[[ ***0.19***,0.02,0.65],[ 0.88,0.11,0.07],[ 0.26,0.88,0.17]]

 [[ ***0.13***,0.20,0.48],[ 0.40,0.07,0.67],[ 0.31,0.47,0.01]]

 [[ ***0.40***,0.31,0.92],[ 0.45,0.26,0.53],[ 0.46,0.24,0.47]]]

我需要以下内容:

- 沿第一个数组中的某个轴计算唯一值A(例如,, value(0,0,0), :value(1,0,0)value(2,0,0))

0, 1, 0 = > "0" - 2 values  and "1" – 1 value.

- 从数组计算适当的总和B

0 => 0.19+0.4 = 0.59; 1 => 0.13

- 在数组 A 中找到最大和的值B

0.59>0.13 => value 0

对数组中的所有值进行此类计算的最有效方法是什么A

我需要获取结果数组([***0***,1,0,1,0,1,0,1,0]) ,例如数据。

问候

4

1 回答 1

0

由于您必须读取每个值以求和或比较,因此该算法预计具有 O(n) 复杂度(其中 n 是矩阵中的项目总数)。在这里,您可以找到在 O(n) 时间内计算所需内容的过程:

对于矩阵A[x][y][z]B[x][y][z]。假设 A 中的值在 0 到 9 之间变化。

由于您计算每个 y 轴的值,因此我们将获得[x,z]对的值:

x: order of tuple in horizontal 
z: order of value in that tuple

首先,定义一个加权和数组,该数组保存每个 Y 轴上 A 中每个值的和值:W[x][z][value]

计算权重如下:

for(x=0; x<3; x++) 
{
    for(z=0; z<3; z++) 
    {
        for(y=0; y<3; y++) 
        {
            val = A[x][y][z];
            W[x][z][val] += B[x][y][z];
        }
    }
} 

然后使用这个加权和数组来计算 A 中的主要值:

for(x=0; x<3; x++) 
{
    for(z=0; z<3; z++) 
    {
        maxSum = 0;
        dominantValue = 0;
        for(val=0; val<10; val++)
        {
            if(W[x][z][val] > maxSum)
            {
                maxSum = W[x][z][val];
                dominantValue = val;
            }
        }
        result[x][z] = val;
        //OR: result[3*x+z] = val;
    }
}
于 2012-08-28T06:31:38.233 回答