a * b * y中的错误:不一致的数组

时间:2014-07-10 19:22:14

标签: r

Cold <- matrix(c(1.89,3.76,2.47,4.76),2,2,byrow=TRUE)
X <- matrix(c(0,2,2,4,3,6),3,2,byrow=TRUE)
y <- matrix(c(1,5,6))

m <- 2;
R <- 2;
Ec <- 0.001;
p <- 1/(m-1)

C <- mat.or.vec(R,R)
M <- length(X[,1])
mu <- mat.or.vec(M,R)
#mu=matrix(,M,R)
Q1=0;Q2=0;
pl <- 1/(m-1)
F=0;
it <- 0;
ph <- 1;


repeat
{




####################
for (i in 1:M)
{
for (j in 1:R)
{
Q1=0;Q2=0;F=0
Q1 <- sum((X[i,]-Cold[j,])^2)
for (k in 1:R)
{
Q2 <- sum((X[i,]-Cold[k,])^2)
F=Q1/Q2+F
}
mu[i,j] <- solve(F)
}
}


####################






##########centre Update
B=mat.or.vec(1,2);
for (j in 1:R)
{
A=mat.or.vec(1,2);
for (i in 1:M)
{
A=X[i,]*mu[i,j]^m+A

#C=(t(mu)*X)/colSums(mu)
}
B=colSums(mu^m)
C[j,] <- A/B[j];
}
#########centre update end



ph <- abs(sqrt(sum((C - Cold)^2)))
Cold <- C
##################
if(ph < Ec)  
{
break;
}
it <- it+1
}
##################


X
plot(X[,1],X[,2],pch=5,lwd=6,col = "blue",cex = .6)
for(i in 1:length(C[,1]))
{
points(C[i,1],C[i,2],pch=4,lwd=4)       
}

library(MASS)

w <- rep(1,nrow(X))
X <- cbind(w,X)
X <- as.matrix(X)
para <-  mat.or.vec(3,R)
 #i<-0

h <- mat.or.vec(3,3)
a <- mat.or.vec(3,3)
b <- mat.or.vec(3,3)
for(i in 1:R)
#while (i<3)
{
h <- t(X)*(diag(mu[,i]))^2*X
a <- solve(t(X)*(diag(mu[,i]))^2*X)
b <- (t(X)*diag(mu[,i])^2)
para[,i] <- a*b*y
}
  

这是聚类的代码,它聚类数据并且它工作得很好但它给了我&gt;计算规则结果的最后部分的错误,它最终对&gt; me.It显示错误&#34; a * b * y中的错误:不一致的数组&#34;,任何人都可以帮助我&gt;请?

1 个答案:

答案 0 :(得分:5)

短语“conformable arrays”是线性代数行话,意思是“可以合理操作的阵列”。

例如,如果要将两个数组一起添加,则它们的大小必须相同。

事实上,由于标准数学运算符+-*/^等逐个元素运算,你总是需要数组(或矩阵)大小相同。

对于(内部)矩阵乘法%*%,第一个矩阵中的列数必须与第二个矩阵中的行数相同。