Как я могу разбить массив на подмассивы с другим измерением с NumPy? - PullRequest
0 голосов
/ 05 ноября 2018

Я должен разделить массив на 3 различных подмассива измерения w=(N,2), b=(N,1), v=(1,N). Они были объединены ранее, с

u= np.concatenate((b,w.flatten(),v),axis=None)

но теперь мне нужно разделить и получить оригинальные (w,b,v).

Я пытаюсь с np.array_split, но не знаю, как это сделать.

1 Ответ

0 голосов
/ 05 ноября 2018

Мы можем индивидуально получить их обратно:

b = u[:n].reshape(-1, 1)
v = u[-n:].reshape(1, -1)
w = u[n:-n].reshape(-1, 2)

Это работает, поскольку u - это вектор с 4 & times; N элементами, который выглядит следующим образом:

u = [ b<sub>00</sub>, b<sub>10</sub>, &hellip;, b<sub>n0</sub>,
      w<sub>00</sub>, w<sub>01</sub>, w<sub>10</sub>, w<sub>11</sub>, &hellip;, w<sub>n0</sub>, w<sub>n1</sub>,
      v<sub>00</sub>, v<sub>01</sub>, &hellip;, v<sub>0n</sub>]

Таким образом, речь идет о первых n элементах, последних n элементах и ​​элементах между ними.

Например, для n=5 мы можем случайным образом сгенерировать три массива:

>>> w
array([[ 1., -0.],
       [-1.,  2.],
       [ 0., -2.],
       [-1.,  1.],
       [-1., -1.]])
>>> b
array([[ 0.],
       [-1.],
       [-0.],
       [-1.],
       [-0.]])
>>> v
array([[-0., -0., -0., -0., -2.]])

, затем u:

>>> u
array([ 0., -1., -0., -1., -0.,  1., -0., -1.,  2.,  0., -2., -1.,  1.,
       -1., -1., -0., -0., -0., -0., -2.])

мы можем получить данные обратно:

>>> u[:n].reshape(-1, 1)  # b
array([[ 0.],
       [-1.],
       [-0.],
       [-1.],
       [-0.]])
>>> u[-n:].reshape(1, -1)  # v
array([[-0., -0., -0., -0., -2.]])
>>> u[n:-n].reshape(-1, 2)  # w
array([[ 1., -0.],
       [-1.,  2.],
       [ 0., -2.],
       [-1.,  1.],
       [-1., -1.]])
...