#python #arrays #python-2.7
#python #массивы #python-2.7
Вопрос:
Эй, ребята, итак, у меня есть 2D-массив, который выглядит следующим образом:
12381.000 63242.000 0.000 0.000 0.000 8.000 9.200 0.000 0.000
12401.000 8884.000 0.000 0.000 96.000 128.000 114.400 61.600 0.000
12606.000 74204.000 56.000 64.000 72.000 21.600 18.000 0.000 0.000
12606.000 105492.000 0.000 0.000 0.000 0.000 0.000 0.000 45.600
12606.000 112151.000 2.400 4.000 0.000 0.000 0.000 0.000 0.000
12606.000 121896.000 0.000 0.000 0.000 0.000 0.000 60.800 0.000
(Вырезать пару столбцов из-за форматирования)
Таким образом, он указывает идентификатор сотрудника, идентификатор отдела, за которым следуют 12 месяцев, отработанных каждым сотрудником, и часы, которые они отработали за каждый месяц. Мой 2D-массив — это, по сути, список списков, где каждая строка является отдельным списком. Я пытаюсь преобразовать каждое ненулевое значение в единицу и сохранить все нули. Всего 857 строк и 14 столбцов. Мой код выглядит следующим образом:
def convBin(A):
"""Nonzero values are converted into 1s and zero values are kept constant.
"""
for i in range(len(A)):
for j in range(len(A[i])):
if A[i][j] > 0:
A[i][j] == 1
else:
A[i][j] == 0
return A
Может кто-нибудь сказать мне, что я делаю не так?
Комментарии:
1. Почему вы думаете , что делаете что-то не так? Какой результат вы ожидали, и что вы получаете вместо этого? В каком формате на самом деле находятся ваши данные —
list
изlist
s ?numpy.ndarray
?pandas.DataFrame
?2. Мой вывод — это тот же самый точный массив. Я не получаю только 0 и 1
3. Мои данные находятся в списке списков
Ответ №1:
Вы выполняете оценку равенства, а не присваивание, внутри вашего цикла:
A[i][j] == 1
должно быть
A[i][j] = 1
# ^ note only one equals sign
Кроме того, в этом нет необходимости return A
; A
модифицируется на месте, поэтому обычно используется неявно return None
путем удаления явной return ...
строки.
Вы должны иметь в виду, что:
- На самом деле вы ничего не хотите делать в этом
else
случае; и - Повторение
range(len(...))
не является Pythonic — используйте, напримерenumerate
.
Поэтому ваша функция может быть упрощена до:
def convBin(A):
"""Convert non-zero values in 2-D array A into 1s."""
for row in A:
for j, val in enumerate(row):
if val:
row[j] = 1