Итеративная вставка столбца и строк в 2d numpy

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Задается следующий 2d numpy.

 prv = np.array([[1,2],[3,4],[5,6]])
  

Я хочу итеративно перебирать prv строки, выполнять некоторые вычисленияа и вставлять результаты в новый столбец в new numpy. Значения из предыдущего numpy необходимо сохранить в контексте вычисления, поэтому размер нового numpy зависит от результатов, полученных с помощью функции.

Например, выполнение следующей операции:

 for i in prv:
    new_line = calc_something(i)
  

Результаты calc_something(i) могут быть примерно такими:

 [[1,2,7],
 [1,2,6],
 [1,2,3],
 [3,4,3],
 [5,6,9],
 [5,6,7]]
  

То есть результатами calc_something(i) для каждой строки может быть список, который хранится в последнем столбце, в то время как первый и второй столбцы сохраняют значения первого numpy в контексте результатов.

Например, тестовые данные для calc_something(i) могут быть:

 def calc_something(i):
    if i[0] == 1:
        b = np.array([7,6,3])
        return b
    if i[0] == 3:
        b = np.array([3])
        return b
    if i[0] == 5:
        b = np.array([9,7])
        return b
  

Ответ №1:

  1. Запустите calc_something для всех строк и сохраните их в списке
  2. Используется numpy.hstack для объединения исходного массива и результатов
 #Example usage
import numpy as np
prv = np.zeros((10, 2)) # original array

results = []
for x in prv:
    results.append(calc_something(x))

results = np.reshape(np.array(results), (prv.shape[0], 1))

combined = np.hstack((prv, results)) # combine the two array
  

Комментарии:

1. Исходный массив prv = np.array([[1,2],[3,4],[5,6]]) содержит по одному экземпляру на строку. Невозможно заранее знать, каким будет результат функции new_line = calc_something(i) . Можете ли вы подробнее рассказать о том, как это решает проблему?

2. @ElhananSchwarts 1. Я не понял «prv содержит один экземпляр на строку». Вы ссылались на каждую строку как на экземпляр? 2. С моим решением calc_something должно быть число. Сохраните числа в списке, измените, чтобы numpy array затем использовать hstack . Если есть вероятность, что результат calc_something не начинается с числа, я не могу вам помочь

3. Я отредактировал вопрос и добавил возможный пример выполнения функции calc_something(i) . Можно предположить, что функция возвращает число.

4. Можете ли вы проверить, будет ли решение, которое вы дали, работать с def calc_something(i): приведенной выше функцией