Как правильно использовать numpy.c_ для массивов - PullRequest
0 голосов
/ 27 марта 2019

У меня есть функция, которую я пытаюсь векторизовать.Внутри функции у меня есть следующий код:

A = np.c_[xdata, ydata, np.ones(len(zdata))]

Где x_data, y_data, z_data - это массив 1x5, например.[1,2,3,4,5].Результирующий вывод для A будет

array([[1.90155189, 1.64412979, 1.        ],
       [2.44148892, 1.73851717, 1.        ],
       [1.65259189, 2.10693759, 1.        ],
       [2.52045732, 2.30939049, 1.        ],
       [1.53516213, 2.39788003, 1.        ]])

Я хотел бы преобразовать эту часть функции для работы с массивом входных данных (например, 1000 строк из 5 столбцов) для x, y, z.Я наивно пытался просто передать массивы в эту функцию со следующим выводом для первой строки.

array([1.90155189, 2.44148892, 1.65259189, 2.52045732, 1.53516213,
       1.64412979, 1.73851717, 2.10693759, 2.30939049, 2.39788003,
       1.        ])

Вот пример ввода для первого результата:

x=[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213]
y=[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003]
z=[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575]

Допустим, теперь у меня есть следующие данные для второго метода:

x_array = [[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213],
           [1.90155189 2.44148892 1.65259189 2.52045732 1.53516213],
           [1.90155189 2.44148892 1.65259189 2.52045732 1.53516213]]
y_array = [[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003],
           [1.64412979 1.73851717 2.10693759 2.30939049 2.39788003],
           [1.64412979 1.73851717 2.10693759 2.30939049 2.39788003]]
z_array = [[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575],
           [0.23273446 0.57301046 0.89755946 0.07169598 0.41394575],
           [0.23273446 0.57301046 0.89755946 0.07169598 0.41394575]]

с ожидаемым результатом

     [[[1.90155189, 1.64412979, 1.        ],
       [2.44148892, 1.73851717, 1.        ],
       [1.65259189, 2.10693759, 1.        ],
       [2.52045732, 2.30939049, 1.        ],
       [1.53516213, 2.39788003, 1.        ]],
       [[1.90155189, 1.64412979, 1.        ],
       [2.44148892, 1.73851717, 1.        ],
       [1.65259189, 2.10693759, 1.        ],
       [2.52045732, 2.30939049, 1.        ],
       [1.53516213, 2.39788003, 1.        ]],
      [[1.90155189, 1.64412979, 1.        ],
       [2.44148892, 1.73851717, 1.        ],
       [1.65259189, 2.10693759, 1.        ],
       [2.52045732, 2.30939049, 1.        ],
       [1.53516213, 2.39788003, 1.        ]]]

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете использовать это:

РЕДАКТИРОВАТЬ: Комментарий ниже строки, добавил следующую строку, благодаря комментарию @ hpaulj.

# new_A = np.stack((x,y,np.ones_like(z)), axis=1).swapaxes(1,2)
new_A = np.stack((x,y,np.ones_like(z)), axis=2)

Тестирование:

THOUSAND = 6
x = np.random.randint(1,5,size=(THOUSAND,5))
y = np.random.randint(1,5,size=(THOUSAND,5))
z = np.random.randint(1,5,size=(THOUSAND,5))

print (x)
print (y)
print (z)

new_A = np.stack((x,y,np.ones_like(z)), axis=1).swapaxes(1,2)
print (new_A)

Выход:

[[1 2 2 1 1]      # print(x)
 [4 4 4 4 4]
 [1 2 1 3 3]
 [2 3 1 4 4]
 [1 1 4 1 4]
 [4 1 3 3 2]]
[[2 2 3 4 4]      # print(y)
 [1 1 4 2 1]
 [3 3 1 1 2]
 [1 1 2 1 3]
 [3 2 1 4 3]
 [4 4 1 3 2]]
[[3 4 3 2 2]      # print(z)
 [4 2 4 3 3]
 [3 3 4 1 4]
 [4 3 3 3 1]
 [4 1 1 3 3]
 [4 1 4 3 3]]

# new_A output

[[[1 2 1]      # print(new_A)
  [2 2 1]
  [2 3 1]
  [1 4 1]
  [1 4 1]]

 [[4 1 1]
  [4 1 1]
  [4 4 1]
  [4 2 1]
  [4 1 1]]

 [[1 3 1]
  [2 3 1]
  [1 1 1]
  [3 1 1]
  [3 2 1]]

 [[2 1 1]
  [3 1 1]
  [1 2 1]
  [4 1 1]
  [4 3 1]]

 [[1 3 1]
  [1 2 1]
  [4 1 1]
  [1 4 1]
  [4 3 1]]

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