我正在尝试将列表ND数组转换为数据帧,以便在其上执行Isomap。但这不会转换。任何人如何转换,以便我可以在上面做一个Isomap?
#Creation and filling of list samples*
samples = list()
for i in range(72):
img =misc.imread('Datasets/ALOI/32/32_r'+str(i*5)+'.png' )
samples.append(img)
...
df = pd.DataFrame(samples) #This doesn't work gives
#ValueError: Must pass 2-d input*
...
iso = manifold.Isomap(n_neighbors=4, n_components=3)
iso.fit(df) #The end goal of my DataFrame
答案 0 :(得分:0)
您有两种可能的修复方法:
wp = pd.Panel.from_dict(zip(samples, [str(i*5) for i in range(72)]))
# On top of another:
df = pd.concat([pd.DataFrame(sample) for sample in samples], axis=0,
keys=[str(i*5) for i in range(72)])
# Side by side:
df = pd.concat([pd.DataFrame(sample) for sample in samples], axis=1,
keys=[str(i*5) for i in range(72)])
答案 1 :(得分:0)
另一种方法是使用图像上的reshape方法将2D数组(图像)转换为1D数组(sklearn所期望的):
for i in range(yourRange):
img = misc.imread(yourFile)
samples.append(img.reshape(-1))
df = pd.DataFrame(samples)
答案 2 :(得分:0)
奥利维拉几乎拥有它。
运行misc.imread时,输出为NxM(2D)数组。将其放入列表中,使其成为3D。 DataFrame需要2D输入。
在进入列表之前,阵列应该使用ravel“展平”:
img =misc.imread('Datasets/ALOI/32/32_r'+str(i*5)+'.png' ).ravel()
重塑数组会保留数组的等级。而不是将它转换为Nx1数组,你希望它是Nx(无),这就是ravel()的作用。