免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5422 | 回复: 7
打印 上一主题 下一主题

关于二维数组的运算,贴段KDJ指标的代码,在8楼 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-12 14:55 |只看该作者 |倒序浏览
本帖最后由 hlsd665 于 2011-01-15 14:16 编辑

有如下长度为N的数组
X=[
[5.12,5.13,5.25,5.75]
[5.42,5.33,5.75,5.55]
[5.32,5.83,5.25,5.23]
[5.92,5.23,5.05,5.75]
[5.22,5.03,5.25,5.95]
    。
    。
    。


数组中的数值之间没有任何关系,
循环(len(x)-M)次
从第一个元素X[0]起取M个元素,做计算,
然后从第第二个元素X[1]起取M个元素,做计算。
以此类推,形式上用普通的循环就可以做到,


我没有学过高等数学,想问下有没有更简单的解法做优化。

论坛徽章:
0
2 [报告]
发表于 2011-01-12 16:46 |只看该作者
M会大于子元素的长度吗。。。

论坛徽章:
0
3 [报告]
发表于 2011-01-12 18:12 |只看该作者
本帖最后由 iamkey9 于 2011-01-12 18:17 编辑

回复 1# hlsd665

numpy, array, tril, triu,

this may help.
http://docs.scipy.org/doc/numpy/ ... array-creation.html

论坛徽章:
0
4 [报告]
发表于 2011-01-13 07:21 |只看该作者
本帖最后由 hlsd665 于 2011-01-13 09:14 编辑

回二楼:M小于数组的长度,
回三楼:谢谢您。我去看下。

感谢三楼,从您的指引下找到了一本好书“用Python做科学计算“,真不错啊,

地址如下:http://pyscin.appspot.com/html/index.html

论坛徽章:
0
5 [报告]
发表于 2011-01-13 09:48 |只看该作者
回二楼:M小于数组的长度,
回三楼:谢谢您。我去看下。

感谢三楼,从您的指引下找到了一本好书“用Pyt ...
hlsd665 发表于 2011-01-13 07:21


这本书本版有人介绍过,你向作者发邮件,他会给你PDF版本,比网页新,不过作者要求不能共享

论坛徽章:
0
6 [报告]
发表于 2011-01-13 12:18 |只看该作者
回5楼:
其实我用的部分只有数组处理部分,

作者说了,这本书适合工科、本科。。。。

我的数学只有高中水平,所以只取对我有用的部分,

另外再次感谢您。

论坛徽章:
0
7 [报告]
发表于 2011-01-13 16:54 |只看该作者
这不就是
  1. for i in range(len(x)-M):
  2.     XXX(x[i:i+M])
复制代码
你还打算怎么简化呢。。。。

论坛徽章:
0
8 [报告]
发表于 2011-01-14 16:56 |只看该作者
本帖最后由 hlsd665 于 2011-01-15 17:22 编辑

横向可以切片,纵向不可以切片,在用引入NUMPY模块之前。

取出来的值用来画了KDJ指标。
  1. import numpy as np


  2. def KDJ(date,N=9,M1=3,M2=3):
  3.     datelen=len(date)
  4.     array=np.array(date)
  5.     kdjarr=[]
  6.     for i in range(datelen):
  7.         if i-N<0:
  8.             b=0
  9.         else:
  10.             b=i-N+1
  11.         rsvarr=array[b:i+1,0:5]
  12.         rsv=(float(rsvarr[-1,-1])-float(min(rsvarr[:,3])))/(float(max(rsvarr[:,2]))-float(min(rsvarr[:,3])))*100
  13.         if i==0:
  14.             k=rsv
  15.             d=rsv
  16.         else:
  17.             k=1/float(M1)*rsv+(float(M1)-1)/M1*float(kdjarr[-1][2])
  18.             d=1/float(M2)*k+(float(M2)-1)/M2*float(kdjarr[-1][3])
  19.         j=3*k-2*d
  20.         kdjarr.append(list((rsvarr[-1,0],rsv,k,d,j)))
  21.     return kdjarr
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP