对不起,我对社区很新。所以可能这个问题可能是微不足道的。 无论如何,我创建了一个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
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
可能是为了启动临时替换,逻辑不准确。但正如我告诉你的那样,我在这个领域是全新的。
提前感谢您的帮助。
安德烈
答案 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_samples
和n_centers
中的一个或两个是一个数组。 //
是整数除法,结果是整数数组。尝试将其转换为一个整数(这是Python int
函数的作用)是一个错误。而且不需要尝试这种转换。加astype(int)
是将float数组转换为整数的正确方法。