Как я могу преобразовать мой массив в 0 или 1 элемент?

1
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 1 1 1 0 0 0 0 0 1 1 0 0 3 3 0 0 0 4 4 0 0 0 5 5 5 5 0 0 2 2 2 2 2 0 2 2 2 2 2 0 0 0 6 6 6 6 6 6 0 6 6 6 6]
 [0 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 2 2 2 2 2 2 2 2 2 2 2 2 0 0 6 6 6 6 6 6 6 6 6 6 6]
 [1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 0 0 5 5 5 0 2 2 0 0 2 2 0 0 0 2 2 0 0 6 6 0 0 6 6 6 0 0 6 6]
 [1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 5 0 0 0 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
 [1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
 [0 1 1 0 0 0 0 0 0 7 0 0 0 3 3 0 0 0 4 4 0 0 0 0 5 5 5 5 5 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]]

то, что я хочу, - это изменить значение каждого из чисел 0 на 1.

что я могу сделать:

for element in list:
    for sub_element in element:
        if sub_element != 0:
           sub_element = 1

Как я могу сделать это в numpy?

Теги:
arrays
numpy
python-3.x

2 ответа

2
Лучший ответ

Учитывая массив NumPy A:

res = A.astype(bool).astype(int)

Для эффективности и большинства случаев использования вы можете сохранить свой массив как Boolean, опустив целочисленное преобразование.

Это работает, потому что 0 - единственное целое число, считающееся False; все остальные True. Преобразование булевого массива в int является тривиальным отображением False на 0 и True на 1.

  • 0
    Я проверил с помощью np.unique(A) и, кажется, правильно, так как 0 и 1 являются единственными значениями. np.unique(A) ли вы отредактировать ответ, чтобы объяснить, как работает эта строка, поскольку я ее не понял, спасибо.
  • 0
    @Nelly, конечно, я добавил объяснение.
Показать ещё 2 комментария
5

Если ваш массив numpy имеет имя a, вы можете использовать что-то вроде этого:

a[a!=0.0] = 1

доказательство:

>>> a = numpy.array([0.0, 1.0, 2.0, 3.0, 0.0, 10.0])
>>> a
array([  0.,   1.,   2.,   3.,   0.,  10.])
>>> a[a!=0.0] = 1
>>> a
array([ 0.,  1.,  1.,  1.,  0.,  1.])

Это работает, потому что a != 0.0 вернет массив с значениями True/False где выполняется условие, а затем назначение выполняется только для тех элементов, где есть True:

>>> a != 0
array([False,  True,  True,  True, False,  True], dtype=bool)

Кроме того, это работает с любым другим условием.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню