[[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?
Учитывая массив NumPy A
:
res = A.astype(bool).astype(int)
Для эффективности и большинства случаев использования вы можете сохранить свой массив как Boolean, опустив целочисленное преобразование.
Это работает, потому что 0
- единственное целое число, считающееся False
; все остальные True
. Преобразование булевого массива в int
является тривиальным отображением False
на 0
и True
на 1
.
Если ваш массив 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)
Кроме того, это работает с любым другим условием.
np.unique(A)
и, кажется, правильно, так как 0 и 1 являются единственными значениями.np.unique(A)
ли вы отредактировать ответ, чтобы объяснить, как работает эта строка, поскольку я ее не понял, спасибо.