r 奇怪地将特征向量复制到 for i 循环中的矩阵
r behaves strangely copying eigenvectors to a matrix in a for i loop
我有点困惑。矩阵 A 有 8 个特征值,其中一些是复数,一些是实数。我只想将与实特征值对应的特征向量作为列复制到矩阵 M 中,否则该列应填充 0。我使用代码:
M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[,i], 0)
}
但结果就像我执行了这个:
M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[**1**,i], 0)
}
(BTW 实际上生成与上面代码完全相同的输出)。我的误解在哪里?
我通过 R-help@r-project.org 找到了解决方案:这不是矩阵或 for i 循环行为的问题,而是 ifelse 的问题,它在 R 中的行为与例如非常不同C中的ifelse。所以处理我的想法的正确方法是:
for(i in 1:8) {
M[,i] <- if(Im(eigen(A)$val[i]) == 0) eigen(A)$vec[,i] else 0
}
我有点困惑。矩阵 A 有 8 个特征值,其中一些是复数,一些是实数。我只想将与实特征值对应的特征向量作为列复制到矩阵 M 中,否则该列应填充 0。我使用代码:
M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[,i], 0)
}
但结果就像我执行了这个:
M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[**1**,i], 0)
}
(BTW 实际上生成与上面代码完全相同的输出)。我的误解在哪里?
我通过 R-help@r-project.org 找到了解决方案:这不是矩阵或 for i 循环行为的问题,而是 ifelse 的问题,它在 R 中的行为与例如非常不同C中的ifelse。所以处理我的想法的正确方法是:
for(i in 1:8) {
M[,i] <- if(Im(eigen(A)$val[i]) == 0) eigen(A)$vec[,i] else 0
}