Ala*_*din 1 python numpy multidimensional-array
我是新手使用numpy类,我遇到操作数组内容的问题.这是代码:
# finance equation to apply to each element of array
for row in cum_ret:
for col in row:
if sum(row)!=0:
row[col] = prev_row[col]*(1+row[col])
else:
row[col] = 1
cum_ret[row][col] = row[col]
prev_row = row
# see changed contents
for row in cum_ret:
print row
Run Code Online (Sandbox Code Playgroud)
现在我收到一个错误,说使用的数组索引必须是整数或布尔类型.我得到它,因为'row'值也是一个数组,因此它不能索引数组对象.那么这样做的正确语法是什么,或者是我应该使用的方法呢?
预先感谢
cum_ret数组是float64s的2d ndarray,是我想要修改的数组.这是输出的简短片段:
[[ 0. 0. 0. 0. 0. ]
[ 0.00046187 0.00836672 0.00020435 -0.00048292 0.00342209]
[-0.07633505 -0.00514199 -0.04133778 -0.02450642 -0.01865075]
...,
[ 0.01229435 0.00175341 0.00709808 0.00213371 0.0061171 ]
[-0.0118614 -0.00994933 -0.00557095 -0.00141945 -0.00347423]
[ 0.01214725 -0.00502466 0.00537611 -0.00035537 -0.00101685]]
Run Code Online (Sandbox Code Playgroud)
以下是它正在发生:
Traceback (most recent call last):
File "qstk1.py", line 37, in <module>
cum_ret[row][col] = row[col]
IndexError: arrays used as indices must be of integer (or boolean) type
Run Code Online (Sandbox Code Playgroud)
如果cum_ret是数组,您可以使用numpy.sum(cum_ret, axis=1)获取行和并numpy.sum(cum_ret, axis=1) != 0立即在整个数组上生成测试.然后您可以numpy.select()用来应用您的条件.
如果你print row在循环的开头放置一个语句,你会注意到它不是整数,而是一个numpy数组......这会导致你的错误.顺便说一句,你不应该需要任何这样的循环来执行此操作.
另一个考虑因素:第一行会发生什么?什么被认为是前一行?
编辑:
看完你的评论后,我想你想要这样的东西:
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)
Run Code Online (Sandbox Code Playgroud)
不需要循环,也不需要检查零行的条件.
| 归档时间: |
|
| 查看次数: |
4690 次 |
| 最近记录: |