【问题标题】:clustering 3D array in RR中的聚类3D数组
【发布时间】:2014-01-24 22:43:44
【问题描述】:

我正在尝试对数组中的 3D 数据进行聚类。它实际上是来自 3D 图像的信息,因此该数组表示具有 x、y、z 值的单个图像。我想知道什么体素倾向于与什么聚集在一起。数组看起来像这样。

 dim(x)
[1] 34 34 34  1

我该怎么办?我尝试使用 scatterplot3d 进行绘图,但它不起作用。

【问题讨论】:

  • 你尝试了什么?向我们展示您的代码。
  • 这不起作用(不是这个集群): scatterplot3d(x[,,,1]) 和 dist(x[,,,1]) 只是没有完成。
  • 您的矩阵似乎有 4 个维度 (34,34,34,1)。最后一个维度是什么意思?
  • 你想要集群还是segmentation
  • 数组的最后一个维度表示我有 1 个维度为 34X34X34 的三维矩阵。如果在数组 x 内我有 2 个 3D 矩阵,它们将表示为 (34,34,34,2)。 @VincentZoonekynd 我想要的是我认为的细分

标签: arrays r cluster-analysis


【解决方案1】:

所以这是集群的尝试。如果您想要更好的答案,您确实应该提供数据。

library(reshape2)   # for melt(...)
library(rgl)        # for plot3d(...)

set.seed(1)         # to create reproducible sample

# 3D matrix, values clustered around -2 and +2
m      <- c(rnorm(500,-2),rnorm(500,+2))
dim(m) <- c(10,10,10) 
v      <- melt(m, varnames=c("x","y","z"))  # 4 columns: x, y, z, value
# interactive 3D plot, coloring based on value
plot3d(v$x,v$y,v$z, col=1+round(v$value-min(v$value)),size=5)
# identify clusters
v      <- scale(v)                          # need to scale or clustering will fail
v      <- data.frame(v)                     # need data frame for later
d  <- dist(v)                               # distance matrix
km <- kmeans(d,centers=2)                   # kmeans clustering, 2 clusters
v$clust <- km$cluster                       # identify clusters
# plot the clusters
plot(z[1:4],col=v$clust)                    # scatterplot matrix
plot3d(v$x,v$y,v$z, col=v$clust,size=5)     # 3D plot, colors based in cluster

主要思想是将您的 3D 矩阵重塑为“长”格式,其中包含 x、y、z 列和实际矩阵值。所以现在 x、y 和 z 包含位置信息(这里是索引值 1:10)。您需要对其进行缩放,以便 value 列和索引列处于相同的比例,否则集群会给您带来误导性结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 2020-04-20
    • 2015-12-09
    • 2014-05-11
    • 2014-04-19
    • 1970-01-01
    • 2015-05-23
    • 2011-03-29
    相关资源
    最近更新 更多