【发布时间】:2021-01-22 17:33:42
【问题描述】:
我有几百个 3d 数组,我想用它们做一些聚类分析,但是 sklearn.cluster.KMeans 只会做一个 2D 数组。我的每个数组的大小都是(56,88,56),我有300。当我将它们组合为一个数组时,我得到(300,56,88,56)。 KMeans 给出错误ValueError: Found array with dim 4. Estimator expected <= 2.。我解决这个问题的一种方法是在我的数组上使用np.ndarray.flatten(),所以我的新数组是(275968,),当组合成一个数组时,我得到(300,275968),我可以使用KMeans 聚类。有没有办法使用 4D 阵列执行聚类分析,或者我最终会得到与展平阵列以进行 2D 分析相同或相似的结果?
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import nibabel as nib
import os, sys
from tqdm import tqdm
DIR = '(56x88x56)\\'
flatten_list = []
for r,d,f in os.walk(DIR):
for file in tqdm(f):
path = DIR + file
cp = nib.load(path).get_fdata()
cp = np.array(cp)
array_flatten = np.ndarray.flatten(cp)
flatten_list.append(array_flatten)
flatten_list = np.array(flatten_list)
kmeans = KMeans(n_clusters = 10, random_state = 0, verbose = 1).fit(flatten_list)
cluster_labels = kmeans.labels_
print(cluster_labels)
【问题讨论】:
标签: python numpy scikit-learn cluster-analysis k-means