Объединение 12 матриц 1х3 - PullRequest
0 голосов
/ 17 мая 2018

Я довольно новичок в Python, и я попытался использовать встроенные функции, такие как добавление (в список), чтобы сделать это, но я не уверен, как это сделать.

У меня есть12 матриц 1x3, в которых я хочу объединить их все для создания матриц 12x3.

У меня есть функция, которая вычисляет направление света на изображении (возвращает массив 1x3)

def comp_light(img, mask):
    """
    assume the viewer is at (0, 0, 1)
    """

    light_direct=[]

    #Calculate centroid of gray image
    centroid = compute_centroid(img)

    #Calculate centroid of mask
    mask_centroid = compute_centroid(mask)
    mask_radius = compute_radius(mask, mask_centroid)

    r = mask_radius
    dx = centroid[1]-mask_centroid[1]
    dy = centroid[0]-mask_centroid[0]
    dy = -dy

    N = np.array([dx/r,dy/r,math.sqrt(r*r - dx*dx - dy*dy)/r])

    R = np.array([0,0,1])
    L = 2*np.dot(N,R)*N-R

    light_direct.append(L)


    return light_direct

И затем у меня есть данные для 12 изображений (оттенки серого и маска), и яЯ хочу использовать эти два для вычисления световых направлений.

for i in range(12):
    light = comp_light(gray['chrome'][i],mask['chrome'])
    print(light)

Вывод, который я получаю из этого цикла:

[array([0.44179545, 0.44251159, 0.78038469])]
[array([0.03981791, 0.1526196 , 0.98748255])]
[array([-0.04485713,  0.17308602,  0.98388468])]
[array([-0.09494382,  0.43736653,  0.89425734])]
[array([-0.30896139,  0.48596268,  0.81754702])]
[array([-0.09564658,  0.56019186,  0.82282247])]
[array([0.24524103, 0.40670384, 0.88002774])]
[array([0.08200615, 0.4203557 , 0.90364599])]
[array([0.20189239, 0.34563383, 0.91639332])]
[array([0.0855834 , 0.34030184, 0.93641345])]
[array([0.11078827, 0.05101894, 0.99253364])]
[array([-0.1302858 ,  0.35921852,  0.92411453])]

Как мне объединить все эти матрицы в Python?

Ответы [ 4 ]

0 голосов
/ 17 мая 2018

Это то, что вы искали:

np.concatenate(comp_light(gray['chrome'][i],mask['chrome']) for i in range(12))
#[[ 0.44179545  0.44251159  0.78038469]
# [ 0.03981791  0.1526196   0.98748255]
# [-0.04485713  0.17308602  0.98388468]
# [-0.09494382  0.43736653  0.89425734]
# [-0.30896139  0.48596268  0.81754702]
# [-0.09564658  0.56019186  0.82282247]
# [ 0.24524103  0.40670384  0.88002774]
# [ 0.08200615  0.4203557   0.90364599]
# [ 0.20189239  0.34563383  0.91639332]
# [ 0.0855834   0.34030184  0.93641345]]
0 голосов
/ 17 мая 2018

попробуйте создать новый массив перед циклом следующим образом:

light = []
for i in range(12):
    light.append(comp_light(gray['chrome'][i],mask['chrome']))
print(light)

таким образом, вы должны поместить все свои массивы в новый массив света

0 голосов
/ 17 мая 2018
import numpy as np
x=[[np.array([0.44179545, 0.44251159, 0.78038469])],
[np.array([0.03981791, 0.1526196 , 0.98748255])],
[np.array([-0.04485713,  0.17308602,  0.98388468])],
[np.array([-0.09494382,  0.43736653,  0.89425734])],
[np.array([-0.30896139,  0.48596268,  0.81754702])],
[np.array([-0.09564658,  0.56019186,  0.82282247])],
[np.array([0.24524103, 0.40670384, 0.88002774])],
[np.array([0.08200615, 0.4203557 , 0.90364599])],
[np.array([0.20189239, 0.34563383, 0.91639332])],
[np.array([0.0855834 , 0.34030184, 0.93641345])],
[np.array([0.11078827, 0.05101894, 0.99253364])],
[np.array([-0.1302858 ,  0.35921852,  0.92411453])]]
x1=np.concatenate(x,axis=0)
x1.reshape((12,3))
print(x1.shape)

Надеюсь, это поможет.Весь массив хранился в одном списке.И вы можете использовать np.concatenate () для объединения.

0 голосов
/ 17 мая 2018

Вы можете просто использовать np.array для объединения векторов в матрицу.

import numpy as np
a = np.ones(3)
b = np.ones(3) * 2
c = np.ones(3) * 3
matrix = np.array([a, b, c])
print(repr(matrix))

Выход:

array([[1., 1., 1.],
      [2., 2., 2.],
      [3., 3., 3.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...