Я думаю, что это операция, которую вы пытаетесь сделать. Я предлагаю использовать процедуру np.where
для установки значений менее 0,25 на ноль. Затем вы можете суммировать только первое измерение массива, чтобы получить массив вывода, который вы ищете. Для примера я уменьшил размеры проблемы.
import numpy as np
vals = np.random.random([24, 2, 3])
vals_filtered = np.where(vals < 0.25, 0.0, vals)
out = vals_filtered.sum(axis=0)
print("First sample array has the slice vals[0,:,:]:\n{}\n".format(vals[0, :, :]))
print("First sample array with vals>0.25 set to 0.0:\n{}\n".format(vals_filtered[0, :, :]))
print("Output array is the sum over the first dimension:\n{}\n".format(out))
Это возвращает следующий выход.
First sample array has the slice vals[0, :, :]:
[[ 0.16272567 0.13695067 0.5954866 ]
[ 0.50367823 0.8519252 0.3000367 ]]
First sample array with vals>0.25 set to 0.0:
[[ 0. 0. 0.5954866 ]
[ 0.50367823 0.8519252 0.3000367 ]]
Output array is the sum over the first dimension:
[[ 11.12707813 12.04175706 11.5812803 ]
[ 13.73036272 9.3988165 12.41808745]]
Этот расчет вы ищите? Вызов vals.sum(axis=0)
- это более быстрый способ выполнить операцию. Обычно лучше вызывать встроенные подпрограммы numpy, в отличие от явного цикла for
.
@F L, каково измерение вашего 'массива', вы сказали, что это 40 * 100, почему вы используете' array [x,:,:] ', похоже, что он 3-мерный? – MaThMaX
@MaThMaX да, x один в основном раз. Но размер 40 * 100 –
Было бы полезно, чтобы код был приведен в простой пример, который может выполняться независимо от внешних определений. Здесь мы должны предположить, что вы подразумеваете под 'array' и' the_values_in_the_array'. –