Извлечение элементов из массива nd и сохранение их в разных векторах - PullRequest
0 голосов
/ 12 июня 2019

У меня есть массив размеров формы 1x17x3, вывод которого выглядит следующим образом

[[[x1 y1 z1]
  [x2 y2 z2]
  [x3 y3 z3]
  [x17 y17 z17]]]

Я хочу извлечь первые два элемента в одномерном векторе следующим образом

vec1 = [x1,y1,x2,y2, ....... x17,y17]
vec20 [z1,z2,z3..............z17]  

Я попытался сгладить весь массив и извлечь элементы, но я не уверен, что это правильный способ работы.

import numpy as np
test = np.random.rand(1,17,3)
print(test)
rev_mat = test.flatten()
print(rev_mat)

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

С 2d массивом:

In [42]: arr = np.arange(12).reshape(4,3)                                                              
In [43]: arr                                                                                           
Out[43]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

мы можем получить первые 2 столбца с:

In [44]: arr[:,:2]                                                                                     
Out[44]: 
array([[ 0,  1],
       [ 3,  4],
       [ 6,  7],
       [ 9, 10]])

и сделайте это 1d с ravel

In [45]: arr[:,:2].ravel()                                                                             
Out[45]: array([ 0,  1,  3,  4,  6,  7,  9, 10])

третий столбец:

In [46]: arr[:,2]                                                                                      
Out[46]: array([ 2,  5,  8, 11])

У вас есть 3d, но первое измерение равно 1, так что вы можете просто «проиндексировать» его следующим образом:

In [47]: arr = np.arange(12).reshape(1,4,3)                                                            
In [48]: arr                                                                                           
Out[48]: 
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]]])
In [49]: arr[0,:,:2].ravel()                                                                           
Out[49]: array([ 0,  1,  3,  4,  6,  7,  9, 10])
0 голосов
/ 12 июня 2019

Пусть х обозначает ваш массив формы 1x17x3.

vec1 = np.empty(x.shape[1] * 2)
vec1[0::2] = x[:,:,0]
vec1[1::2] = x[:,:,1]

vec20 = x[:,:,2].squeeze()

Надеюсь, это поможет!

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