Заполнение значений в массиве, если условия выполняются в другом массиве в Python

#python #arrays #numpy #for-loop #if-statement

#python #массивы #numpy #for-цикл #if-оператор

Вопрос:

Я создал массив d:

 d = [[[1.60269836 1.97347391 1.76414466 1.53102548 1.35352821]
  [1.0153325  1.53331695 1.36105004 1.76111151 1.62595392]
  [1.5156144  1.77076004 1.24249056 1.94406171 1.98917422]]

 [[1.44790465 1.46990159 1.48156613 1.92963951 1.11459211]
  [1.10674091 1.57711027 1.85275685 1.84640848 1.34216641]
  [1.63670185 1.69894884 1.45114395 1.09750849 1.09564564]]]
 

Которые имеют максимальное, минимальное и среднее:

 Max value of d is: 1.98917422158341

Min value of d is: 1.0153325043494292

The mean of d is: 1.5377490722289062
 

Также я создал пустой массив f:

 f = np.empty((2,3,5))
f = [[[1.60269836 1.97347391 1.76414466 1.53102548 1.35352821]
  [1.0153325  1.53331695 1.36105004 1.76111151 1.62595392]
  [1.5156144  1.77076004 1.24249056 1.94406171 1.98917422]]

 [[1.44790465 1.46990159 1.48156613 1.92963951 1.11459211]
  [1.10674091 1.57711027 1.85275685 1.84640848 1.34216641]
  [1.63670185 1.69894884 1.45114395 1.09750849 1.09564564]]]
 

При всем этом мне нужно проверять каждое значение в d и:

  • Если это общее значение больше, чем d_min, но меньше, чем d_mean, присвоите 25 соответствующему значению в f .
  • Если значение в d больше, чем d_mean, но меньше, чем d_max, присвоите 75 соответствующему значению в f .
  • Если значение равно d_mean , присвоите 50 соответствующему значению в f .
  • Присвоите 0 соответствующему значению (значениям) в f для d_min в d .
  • Присвойте 100 соответствующему значению (значениям) в f для d_max в d .

В конце концов, f должно иметь только следующие значения: 0, 25, 50, 75 и 100.

До сих пор моим лучшим решением было:

 for value in d:
    if value.any() > d_min and value.any() < d_mean:
        value = 25
        value.append(f)

    if value.any() > d_mean and value.any() < d_max:
        value = 75
        value.append(f)

    if value.any() == d_mean:
        value = 50
        value.append(f)

    if value.any() == d_min:
        value = 0
        value.append(f)

    if value.any() == d_max:
        value = 100
        value.append(f)
 

Я не получаю никаких ошибок, но и не получаю нужного мне результата. Я только начинаю изучать python и numpy, поэтому я уверен, что найдется лучший способ сделать это, но после прочтения документации и поиска множества примеров я не получаю решения.

Комментарии:

1. Добавьте тег numpy для получения лучших ответов

Ответ №1:

Это то, что вы ищете?

 for i, value_i in enumerate(d):
    for j, value_j in enumerate(value_i):
        for index, value in enumerate(value_j):
            if value > d_min and value < d_mean:
                value = 25
                f[i][j][index] = value
        
            if value > d_mean and value < d_max:
                value = 75
                f[i][j][index] = value
        
            if value == d_mean:
                value = 50
                f[i][j][index] = value
        
            if value == d_min:
                value = 0
                f[i][j][index] = value
        
            if value == d_max:
                value = 100
                f[i][j][index] = value