Если cum_ret является массивом, вы можете использовать numpy.sum(cum_ret, axis=1)
, чтобы получить сумму строк, и numpy.sum(cum_ret, axis=1) != 0
, чтобы сгенерировать ваш тест сразу для всего массива.Тогда вы можете использовать numpy.select()
для применения ваших условий.
Если вы поместите оператор print row
в начале вашего цикла, вы заметите, что он не целочисленный, а просто массив с нулевыми значениями ...Это вызывает вашу ошибку.Кстати, для выполнения этой операции вам не нужен такой цикл.
Еще одно соображение: что происходит в первом ряду?Что считается предыдущей строкой?
РЕДАКТИРОВАТЬ:
После прочтения ваших комментариев, я думаю, вы хотите что-то вроде этого:
import numpy
cum_ret = numpy.array([[0,0,0,0],[-0.234,-0.365,-0.634,-0.453], [-0.334,-0.465,-0.534,-0.653],[-0.134,-0.265,-0.334,-0.453]])
b = cum_ret + 1
c = numpy.cumprod(b, axis=0)
Нет необходимости в цикле, и нет необходимостичтобы проверить ваше состояние на наличие нулевых строк.