我是 python 和 pytables 的新手。目前我正在写一个关于聚类和 KNN 算法的项目。这就是我所拥有的。
** * ** * ** ** 代码 * ** * ** * ** * ** * **** _
import numpy.random as npr
import numpy as np
step0:获取集群
dtype = np.dtype('f4')
pnts_inds = np.arange(100)
npr.shuffle(pnts_inds)
pnts_inds = pnts_inds[:10]
pnts_inds = np.sort(pnts_inds)
for i,ind in enumerate(pnts_inds):
clusters[i] = pnts_obj[ind]
step1:将结果保存到名为 clst_fn.h5 的 HDF5 文件中
filters = tables.Filters(complevel = 1, complib = 'zlib')
clst_fobj = tables.openFile('clst_fn.h5', 'w')
clst_obj = clst_fobj.createCArray(clst_fobj.root, 'clusters',
tables.Atom.from_dtype(dtype), clusters.shape,
filters = filters)
clst_obj[:] = clusters
clst_fobj.close()
step2:其他功能
废话
step3:从 clst_fn 加载集群
pnts_fobj= tables.openFile('clst_fn.h5','r')
for pnts in pnts_fobj.walkNodes('/', classname = 'Array'):
break
#
step4:唤起另一个函数(称为knn)。函数输入参数是来自 pnts 的数据。我已经单独检查了 knn 功能。如果输入为 pnts = npr.rand(100,128),此函数运行良好
def knn(pnts):
pnts = numpy.ascontiguousarray(pnts)
N = ctypes.c_uint(pnts.shape[0])
D = ctypes.c_uint(pnts.shape[1])
#
使用 clst_fn 中的集群调用 knn(参见步骤 3)
knn(pnts)
** * ** * ** ** 代码 结束* ** * ** * ** * ** * ****
我现在的问题是python通过显示给我带来了困难:错误:IndexError:元组索引超出范围此错误来自“D = ctypes.c_uint(pnts.shape [1])”这一行。
显然,输入参数一定有问题。有没有想过解决这个问题?先感谢您。