Нахождение мин. в списке / 2D массиве и произвести расчет в Python - PullRequest
1 голос
/ 09 мая 2020

У меня есть список, я бы хотел найти мин. значения в каждой строке и выполните вычисления: row - row.min - 1.

Это то, что я пробовал

import numpy as np

list = [[1.2886089553007253e-15, 3.283665029781338e-16, 0.0, 3.4027301260438933e-16],\
        [3.047580716284324e-15, 1.3787915767152193e-15, 3.505982818951592e-16, 0.0]]

array = np.asarray(list)

result = array-array.min(axis=0)-1

print(result)

Это результат, который я получил,

[[-1. -1. -1. -1.]
 [-1. -1. -1. -1.]]

Но надеюсь получить

[[1.2886089553007253e-15 -0.0-1, 3.283665029781338e-16 -0.0-1, 0.0 -0.0-1, 3.4027301260438933e-16 -0.0-1], 
[3.047580716284324e-15 -0.0-1, 1.3787915767152193e-15 -0.0-1, 3.505982818951592e-16 -0.0-1, 0.0 -0.0-1]]

Так было бы

[[-0.9999999999999987, -0.9999999999999997, -1, -0.9999999999999997],
 [-0.999999999999997, -0.9999999999999987, -0.9999999999999997, -1]]

Как сделать?

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Чтобы взять минимум из каждой строки, вы действительно хотите взять минимум по столбцам, ie. axis=1. Основываясь на том, что сделал @Patrick, чтобы применить вычитание, нам нужно немного транспонировать, чтобы заставить вещание работать:

import numpy as np
np.set_printoptions(precision=20)

list = [[1.2886089553007253e-15, 3.283665029781338e-16, 0.0, 3.4027301260438933e-16],\
        [3.047580716284324e-15, 1.3787915767152193e-15, 3.505982818951592e-16, 0.0]]

array = np.asarray(list)

# minimum across each row
row_min = array.min(axis=1)
row_min
>>> array([0., 0.])

# row_min.shape = (2,), array.shape = (2, 4)
# so we transpose to do the subtraction and then transpose back
result = (array.T - row_min - 1).T

result
>>> array([[-0.9999999999999987, -0.9999999999999997, -1.                ,
    -0.9999999999999997],
           [-0.999999999999997 , -0.9999999999999987, -0.9999999999999997,
    -1.                ]])
0 голосов
/ 09 мая 2020

У вас уже есть правильные значения - вы просто не печатаете их с достаточной точностью:

import numpy as np
# set the printout precision
np.set_printoptions(precision=20)
list = [[1.2886089553007253e-15, 3.283665029781338e-16, 0.0, 3.4027301260438933e-16],\
        [3.047580716284324e-15, 1.3787915767152193e-15, 3.505982818951592e-16, 0.0]]

array = np.asarray(list)

result = array-array.min(axis=0)-1

print(result)

Вывод:

[[-1.                 -1.                 -1.                  -0.9999999999999997]
 [-0.9999999999999982 -0.999999999999999  -0.9999999999999997  -1.                ]]

См. numpy .set_printoptions

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