TypeError:在数据集加载中,只能将length-1数组转换为Python标量

时间:2017-04-22 11:39:13

标签: python arrays numpy

对不起,我对社区很新。所以可能这个问题可能是微不足道的。 无论如何,我创建了一个numpy矩阵。现在我想通过使用meanshift算法来评估密度点。 不幸的是,我目前面临以下错误: TypeError:只能将length-1数组转换为Python标量

    nygrid=np.zeros((2501,901), dtype=int)
       for x in range(0,39):
       in_file = "C:\Users\User\Desktop\Master en BIGDATA\Trabajo Fin de 
       master\Practica\Data Records\part-m-000" + '{:02d}'.format(x)
       for line in open(in_file):
      passen, forigen, corigen, fdest, cdest = line.split('\t')
      vPass=int(passen)
      vFOrigen=int(forigen)
      vCOrigen=int(corigen)
      vFDest=int(fdest)
      enter code herevCDest=int(cdest)
    nygrid[vFOrigen][vCOrigen]=nygrid[vFOrigen][vCOrigen]+vPass
    nygrid[vFDest][vCDest]=nygrid[vFDest][vCDest]+vPass

现在已加载矩阵nygrid

    from sklearn import datasets
    import mean_shift as ms
    model = ms.MeanShift(kernel_func=ms.gaussian_kernel, bandwidth=50, 
    seeds=500, n_jobs=-1)

创建变量列和行        列= nygrid [:,:901]         行= nygrid [:2501,:]

现在我必须创建X和y,并且想法是将矩阵的整行和整列作为n_samples和center传递        X,y = datasets.make_blobs(n_samples = rows,centers = columns,        cluster_std = np.random.normal(1,.3,n_clusters))

现在我收到以下错误,意识到我无法将变量行和列作为n_sample和center传递。

     X, y = datasets.make_blobs(n_samples=rows, centers=columns)

    File "C:\Users\User\Anaconda2\lib\site-
    packages\sklearn\datasets\samples_generator.py", line 752, in make_blobs
    n_samples_per_center = [int(n_samples // n_centers)] * n_centers

    TypeError: only length-1 arrays can be converted to Python scalars

可能是为了启动临时替换,逻辑不准确。但正如我告诉你的那样,我在这个领域是全新的。

提前感谢您的帮助。

安德烈

1 个答案:

答案 0 :(得分:0)

我可以通过以下方式重现您的错误:

In [29]: int(np.array([1,2]))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-29-26c1a90e530a> in <module>()
----> 1 int(np.array([1,2]))

TypeError: only length-1 arrays can be converted to Python scalars

int(n_samples // n_centers)

n_samplesn_centers中的一个或两个是一个数组。 //是整数除法,结果是整数数组。尝试将其转换为一个整数(这是Python int函数的作用)是一个错误。而且不需要尝试这种转换。加astype(int)是将float数组转换为整数的正确方法。