Используйте цикл while для увеличения значений в массиве, пока все значения не будут => 100 - PullRequest
0 голосов
/ 03 января 2019

Итак, это одно из упражнений в книге как думать как cs, python3 , на стр. 138. Использование маски для умножения всех значений ниже 100 в следующем списке на 2:

a = np.array([230, 10, 284, 39, 76])

Повторяйте это до тех пор, пока все значения не станут больше 100. (Не вручную, а по циклу) Затем выберите все значения между 150

Итак, я попытался сделать это:

while a.all() <= 100:
    a[a < 100] *= 2

print(a[150 < a < 200])

Он не выходит из цикла, даже если он перестает умножаться после достижения [230 160 284 156 152].

Извините, если этот вопрос задавался ранее, но я нигде не мог найти ответ ...

Ответы [ 2 ]

0 голосов
/ 03 января 2019
while np.count_nonzero(a<=100) > 0: 
    a[a<100] *= 2

print(a[(150<a) & (a < 200)])

В вашей программе есть две ошибки. Во-первых, согласно numpy документации , np.all():

Проверить, все ли элементы массива вдоль данной оси имеют значение True. Так что здесь это кажется бесполезным.

Во-вторых, a < x < b нет способа проверить, находится ли x на интервале [a, b]. NumPy способ сделать это - (a<x) & (x>b).

0 голосов
/ 03 января 2019

a.all() <= 100 не делает то, что вы хотите.Вы можете изменить его на следующее:

(a <= 100).all() 

Кроме того, во-первых, не рекомендуется использовать это условие для цикла while.Во-вторых, ваш массив содержит оба элемента больше и меньше чем 100, что делает ваше условие и, следовательно, цикл while бесполезным.Также нет смысла использовать numpy, если вы хотите сделать такую ​​вещь, используя простой цикл вместо векторизованного способа.Вы можете просто использовать список Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...