#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:
- Запустите
calc_something
для всех строк и сохраните их в списке - Используется
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):
приведенной выше функцией