[英]Convert list of NDarrays to dataframe
我正在尝试将列表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
这很明显,不是吗? 所有图像均为2D数据,行和列。 将它们堆叠在列表中会使它获得第三维。 DataFrame本质上是2D。 因此,错误。
您有2个可能的修复:
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)])
另一种方法是使用图像上的reshape方法将2D数组(图像)转换为1D数组(sklearn期望):
for i in range(yourRange):
img = misc.imread(yourFile)
samples.append(img.reshape(-1))
df = pd.DataFrame(samples)
奥利维拉几乎拥有它。
运行misc.imread时,输出为NxM(2D)阵列。 将其放在列表中,使其成为3D。 DataFrame需要2D输入。
在将其放入列表之前,应使用ravel对数组进行“展平”:
img =misc.imread('Datasets/ALOI/32/32_r'+str(i*5)+'.png' ).ravel()
重塑数组可以保留数组的等级。 而不是将其转换为Nx1数组,您希望它成为Nx(nothing),这就是ravel()的作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.