Я хочу сделать поэлементное добавление двух массивов. Первый из них является 1D и содержится в словаре под клавишей «crash», второй - 2D. Пример:

   OrderedDict([('head', array([ 2,  0, 20], dtype=int32)), ('valid', '1  # 
   volume info valid'), ('filename', '../mri/filled-pretess255.mgz'), 
   ('volume', array([256, 256, 256])), ('voxelsize', array([1., 1., 1.])), 
   ('xras', array([-1.,  0.,  0.])), ('yras', array([ 0.,  0., -1.])), 
    ('zras', array([0., 1., 0.])), ('cras', array([-3.433, 18.419, 28.598]))])

    'cras', array([-3.433, 18.419, 28.598])

Добавить к каждому элементу

[[ -9.022 -81.936  -1.822]
 [ -9.554 -82.001  -1.929]
 [-10.186 -81.872  -1.779]
 ...
 [-16.673  76.043 -18.319]
 [-16.989  76.213 -17.823]
 [-17.568  75.554 -18.709]]

Ожидается результат:

[-3.433+(-9.022), 18.419+(-81.936), 28.598+(-1.822)]
....

Как это реализовать?

-1
Relyativist 11 Апр 2019 в 17:31

2 ответа

Лучший ответ

Если ваши данные очень большие, вы можете заглянуть в модуль numpy. Если нет, вы можете сделать это с zip и пониманием списка:

matrix = [[ -9.022, -81.936,  -1.822],
          [ -9.554, -82.001,  -1.929],
          [-10.186, -81.872,  -1.779],
          [-16.673,  76.043, -18.319],
          [-16.989,  76.213, -17.823],
          [-17.568,  75.554, -18.709]]

cras   = [-3.433, 18.419, 28.598]

result = [ [ a+b for a,b in zip(cras,line) ] for line in matrix ]

for line in result: print(line)

# (rounded and aligned the printed values for legibility)
[-12.455, -63.517, 26.776]
[-12.987, -63.582, 26.669]
[-13.619, -63.453, 26.819]
[-20.106,  94.462, 10.279]
[-20.422,  94.632, 10.775]
[-21.001,  93.973,  9.889]
1
Alain T. 11 Апр 2019 в 14:51

Вы пытаетесь добавить содержимое

АКР

К каждому элементу образца 2D списка, который вы предоставили, если я правильно понимаю. Что я сделал, так это преобразовал ваш список образцов в массив numpy, а затем выполнил поэлементное добавление, снова используя numpy.

from collections import OrderedDict
from numpy import array, int32, asarray, add

def adding():
    dict = OrderedDict([('head', array([2, 0, 20], dtype=int32)), ('valid', '1  # \
                 volume info valid'), ('filename', '.. / mri / filled - pretess255.mgz'),
                 ('volume', array([256, 256, 256])), ('voxelsize', array([1., 1., 1.])),
                 ('xras', array([-1., 0., 0.])), ('yras', array([0., 0., -1.])),
                 ('zras', array([0., 1., 0.])), ('cras', array([-3.433, 18.419, 28.598]))])

    'cras', array([-3.433, 18.419, 28.598])

    sample_arr = asarray([[-9.022, -81.936, -1.822],
                 [-9.554, -82.001, -1.929],
                 [-10.186, -81.872, -1.779],
                 [-16.673,  76.043, -18.319],
                 [-16.989, 76.213, -17.823],
                 [-17.568,  75.554, -18.709]])

    result = add(dict['cras'], sample_arr)
    print(result)
    print([-3.433+(-9.022), 18.419+(-81.936), 28.598+(-1.822)])

Результат:

[[-12.455 -63.517  26.776]
 [-12.987 -63.582  26.669]
 [-13.619 -63.453  26.819]
 [-20.106  94.462  10.279]
 [-20.422  94.632  10.775]
 [-21.001  93.973   9.889]]

[-12.455, -63.51700000000001, 26.776]
0
Konstantin Grigorov 11 Апр 2019 в 14:53