2016-06-15 3 views
3

Я пытаюсь вставить условные значения в массив в пустой массив в точном положении.Найти определенные значения внутри массива

empty_array = np.zeros([40,100]) 
for x in range (1,24): 
    array[x,:,:] #which is also sized 40x100 
    if the_values_in_the_array < 0.25: 
     the_values_in_the_array = 0 
    empty_array = empty_array + array [x,:,:] 

Какой синтаксис следует использовать для этой логики? И как мне сканировать значение_values_in_the_array, чтобы найти условные значения?

+0

@F L, каково измерение вашего 'массива', вы сказали, что это 40 * 100, почему вы используете' array [x,:,:] ', похоже, что он 3-мерный? – MaThMaX

+0

@MaThMaX да, x один в основном раз. Но размер 40 * 100 –

+0

Было бы полезно, чтобы код был приведен в простой пример, который может выполняться независимо от внешних определений. Здесь мы должны предположить, что вы подразумеваете под 'array' и' the_values_in_the_array'. –

ответ

4
empty_array = np.zeros([40,100]) 
array = np.random.rand(24,40,100) 

array[array<0.25]=0 # change all the values which is <0.25 to 0 
for x in range(1,24): 
    empty_array += array[x,:,:] 
+0

Большое спасибо. Это намного проще, чем я думал. –

+0

@FL, рад помочь. Для получения дополнительной информации о [numpy boolean array indexing] (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#boolean-array-indexing) – MaThMaX

+0

, так это то, что называется моей проблемой. Спасибо. –

1

Я думаю, что это операция, которую вы пытаетесь сделать. Я предлагаю использовать процедуру 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.

+1

Благодаря вам, теперь я знаю еще один новый синтаксис (и новую логику) для простой проблемы, такой как мой. Отличная информация. –

Смежные вопросы