Мне нужно рассчитать среднее значение массива по размеру - PullRequest
0 голосов
/ 05 мая 2019

Я начал изучать C ++, и у меня больше опыта работы с Python.

У меня есть следующий код, написанный на Python, который возвращает из трехмерного массива 2D-массив среднего значения в Z-измерении

import numpy as np

def mean_py_st_ov(array):
    x = array.shape[1]
    y = array.shape[2]

    values = np.empty((x,y), type(array[0][0][0]))
    for i in range(x):
        for j in range(y):       
            values[i][j] = ((np.mean(array[:, i, j])))

    return values

Я работаю над следующим кодом, чтобы вернуть среднее значение в измерении трехмерного массива, но сейчас .. Я изо всех сил пытаюсь получить элементы ij в каждом измерении за раз.

// C++ program to print elements of Three-Dimensional 
// Array 
#include<iostream> 
using namespace std; 

int main() 
{ 
    // initializing the 3-dimensional array 
    int x[3][2][2] = 
    { 
        { {0,1}, {2,3} },
         {{4,5}, {6,7}}, 
         {{8,9}, {10,11} } 
    }; 

    // output each element's value 
    for (int k = 0; k < 3; ++k) 
    { 
        for (int i = 0; i < 2; ++i) 
        { 
            for (int j = 0; j < 2; ++j) 
            { 
                cout << "Element at x[" << k << "][" << i 
                    << "][" << j << "] = " << x[k][i][j] 
                    << endl; 
            } 
        } 
    } 
    return 0; 
} 

Я получаю следующий вывод

Element at x[0][0][0] = 0
Element at x[0][0][1] = 1
Element at x[0][1][0] = 2
Element at x[0][1][1] = 3
Element at x[1][0][0] = 4
Element at x[1][0][1] = 5
Element at x[1][1][0] = 6
Element at x[1][1][1] = 7
Element at x[2][0][0] = 8
Element at x[2][0][1] = 9
Element at x[2][1][0] = 10
Element at x[2][1][1] = 11

Я хочу получить, скажем ... первый элемент 1array с первым элементом второго массива, затем второй элемент в 1array со вторым элементомиз 2array.Все примеры, которые я просматривал в Интернете, повторяются только таким образом i, j, k, и он печатает все элементы по порядку, а это не то, что я хочу, потому что мне нужно получить среднее значение по оси Z в трехмерном массиве.

Мне нужен следующий вывод:

    Element at x[0][0][0] = 0
    Element at x[1][0][0] = 4
    Element at x[2][0][0] = 8
    Element at x[0][0][1] = 1
    Element at x[1][0][1] = 5
    Element at x[2][0][1] = 9
    Element at x[0][1][0] = 2
    Element at x[1][1][0] = 6
    Element at x[2][1][0] = 10
    Element at x[0][1][1] = 3
    Element at x[1][1][1] = 7
    Element at x[2][1][1] = 11

Не могли бы вы помочь мне, пожалуйста!

Большое спасибо

PD: В качестве дополнительного бонусного балла: Iхотел бы получить среднее значение каждого элемента на оси Z и иметь возможность вывести следующий 2D массив в качестве вывода.int x [2] [2] = {{4,5} {6,7}}

1 Ответ

1 голос
/ 06 мая 2019

Вы должны изменить свои циклы for на это:

 for (int i = 0; i < 2; ++i)
{
    for (int j = 0; j < 2; ++j)
    {
        for (int k = 0; k < 3; ++k)
        {
            cout << "Element at x[" << k << "][" << i
                 << "][" << j << "] = " << x[k][i][j]
                 << endl;
        }
    }
}

Индекс, который изменяется быстрее, должен быть в самом внутреннем для, а индекс, который изменяется меньше, чем в других, должен быть в самом внешнем цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...