2015-06-02 2 views
0
this = rand(100,3,4) 
for i in range(0,100): 
    for j in range(0,3): 
     for k in range(0,4): 
      if rand()<0.5: 
       this[i,j,k]=0 

Где rand находится numpy.random.randПрикованный список понимание в питона

Может быть выше написано в прикованного списке понимание?

Цель: присвоить значение 0 каждый член в «этом» (3D матрице) с некоторой вероятностью (0,5)

+1

Выход не является списком, поэтому не уверен, почему вы просите о понимании списка? Вы спрашиваете, есть ли более pythonic способ реорганизовать ваши вложенные петли? –

+0

@Burhan: да. Можно ли сделать то же самое, используя понятный список? Без вложенных циклов? –

+0

Результатом понимания списка является _list_; ваш код не генерирует список (вместо этого он изменяет матрицу), поэтому не уверен, почему вы ищете понимание списка. –

ответ

3

Мне кажется, что ты лучше использовать встроенные процедуры Numpy, такие как numpy.where .. .

>>> import numpy 
>>> import numpy.random 
>>> x = numpy.random.rand(100, 3, 4) 
>>> mask = numpy.random.rand(*x.shape) 
>>> result = numpy.where(mask < 0.5, 0, x) 
+0

Большое спасибо. :) –

+0

Не могли бы вы объяснить, как работает этот 'rand (* x.shape)'? Что это значит? –

+0

@AbhishekTripathi См. [Расширение кортежей в аргументах] (http://stackoverflow.com/questions/1993727/expanding-tuples-into-arguments) –

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