Изменить отрицательные значения матрицы на абсолютные значения - PullRequest
1 голос
/ 02 ноября 2019

Как я могу изменить отрицательные значения на их положительные значения. Я должен написать процедуру , поэтому нет возвращаемого значения или вывести

У меня есть матрица:


  [-5,-8,-8,-7,-8],
  [-4,-2,-4,-8,-9],
  [-4,-2,-5,-8,-7]

Я хочу, чтобы матрица имела положительные числа. Итак,


  [5,8,8,7,8],
  [4,2,4,8,9],
  [4,2,5,8,7]

У меня есть это:

def procedure(matrix):
   map(abs, matrix)

Но это не работает совсем.

Ответы [ 4 ]

3 голосов
/ 02 ноября 2019

У вас правильная идея, но map() будет работать с каждой строкой матрицы, поскольку матрица представляет собой список списков. Вместо этого вам нужен какой-то цикл для применения функции abs() к каждому элементу в каждой строке. Я хотел бы предложить понимание списка, которое имеет дополнительное преимущество в виде возврата list вместо объекта карты.

def procedure(matrix):
    return [[abs(x) for x in row] for row in matrix]

Test:

>>> m = [
...   [-5,-8,-8,-7,-8],
...   [-4,-2,-4,-8,-9],
...   [-4,-2,-5,-8,-7]
... ]
>>> procedure(m)
[
  [5, 8, 8, 7, 8],
  [4, 2, 4, 8, 9],
  [4, 2, 5, 8, 7]
]
1 голос
/ 02 ноября 2019

Редактировать:

Теперь нет возврата или распечатать

x = [
    [-5, -8, -8, -7, -8],
    [-4, -2, -4, -8, -9],
    [-4, -2, -5, -8, -7],
]  # create matrice (list of lists)


def get_abs(x):
    for line_number in range(len(x)):  # go through lines
        for element_number in range(len(x[line_number])):  # go  through line 
            # get abs
            x[line_number][element_number] = abs(x[line_number][element_number])


get_abs(x)  # get abs

print(x)  # test what we have got
0 голосов
/ 02 ноября 2019

Вы можете использовать map, если действительно хотите, но вы должны привести к списку, потому что он использует ленивую оценку. Вы также должны иметь дело с внутренними списками (строками). Результат нелегко прочитать:

list(map(lambda row: list(map(abs, row)), matrix))

Это мило, но я думаю, что большинство программистов на Python будут использовать списочные выражения (или NumPy).

0 голосов
/ 02 ноября 2019

Вы также можете использовать numpy.array & numpy.absolute

a = [[-5, -8, -8, -7, -8],
     [-4, -2, -4, -8, -9],
     [-4, -2, -5, -8, -7]]

import numpy as np

def procedure(matrix):
    return np.absolute(np.array(matrix))


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