2016-06-21 2 views
1

У меня есть эта упрощенная программа для замены значений в массиве, которые удовлетворяют условиям:Заменить значение в массиве с условием

formula1=2*2 
formula2=5*2 
formula3=4*4 

array = np.random.rand(2,4,10) 
for n,i in enumerate(array): 
    if i>0.5: #find value in array with this condition 
     formula = formula1 
     array[n] = array[n]*formula #replace the found value with this value 
    elif i <0.1: 
     formula = formula2 
     array[n] = array[n]*formula 
    else: 
     formula = formula3 
     array[n] = array[n]*formula 
print array  

Это привело к сообщению об ошибке: "Значение истинности массива с более чем один элемент неоднозначный. Используйте a.any() или a.all() '. Любое предложение?

+0

Вы можете добавить полное отслеживающий? – syntonym

+0

@syntonym if i <0.5: ValueError: Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any() или a.all() –

+0

В вашем цикле for 'i' является массивом. Как бы вы определили, является ли массив меньшим, чем заданное значение? 'any()' проверяет, является ли какой-либо из элементов в массиве меньшим, чем заданное значение, и 'all()' проверяет, являются ли все элементы – SvbZ3r0

ответ

3

Чтобы перечислить массив, вы можете использовать np.ndenumerate (documentation here):

for n, i in np.ndenumerate(array): 
    ... 
+0

Вау. Новый синтаксис для меня, и он работает. Спасибо. –

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