在矩阵上取样的最大值不包括主对角线上的值
问题描述:
我有一个矩阵X,它的主对角线上有最大值。 首先,想要对第i行进行取样,并且沿着第i行挑选除了主对角线值(即,max!= X [i,i])之外的最大值。在矩阵上取样的最大值不包括主对角线上的值
下面的代码通常会产生的结果,但往往有一个错误: Error in if (MAX < l[k]) { : missing value where TRUE/FALSE needed
# initial values
n = 10
pop = runif(n,min =0,max =1)
D = matrix(rnorm(n*n,0,0.2),nrow=n)
str_mat = abs(D)
for (l in 1:n) {
str_mat[l,l] = 1
}
int_mat = matrix(rbinom(n*n,1,z),n,n) ##z takes the values 0.1 - 0.9
for (j in 1:n) {
int_mat[j,j] = 1
}
X = (int_mat*str_mat)*pop
b = c(1:n) #creating a vector with the length being the dimensions of the matrix
a = sample(b,1)## sampling one value from the vector
if (sum(int_mat[a,])< n)
{
### int_mat is a binary matrix
break
}}
l = X[a,]
## Ensuring the maximum value picked is not on the main diagonal
MAX = 0
j = 1
for (k in 1:length(l)) {
if(k!=a) {
if (MAX<l[k]) {
MAX = l[k]
j = k
}
}
}
答
谢谢大家对你的贡献。我想出了如何解决这个问题。如下所示;
X=(int_mat*str_mat)*pop ## creating a matrix of interaction, competition strength and population densities
repeat{
IntRowsums=rowSums(int_mat)
introwsums_greater=which(IntRowsums>2,arr.ind = T)
if (length(introwsums_greater)>1){
a= sample(introwsums_greater,1)
}else{
a=introwsums_greater
}
if (sum(int_mat[a,])< n){
break
}}
q= ABX[a,]
j_k=which(q!=q[a] & q!=0,arr.ind = T) ## from the sampled row in str_mat check the position of all zeros
k=sample(j_k,1)
什么是ABX?请为我们提供一个最小**可重现**示例,即我们可以在R中运行而无需猜测上下文和数据。另请参见http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –
是的,您需要提供一个最小可重现的示例。只需使用随机播种整数声明a,b,X. – smci
另外,它们的维数n有多大,以及我们对它们的值范围知道些什么?如果X不是太大,可以复制并设置'diag(X2) smci