2016-10-24 5 views

答えて

0

JDLsの答えに似ていますが、直接あなたのサブ行列の次元を与える:

mat <- structure(c(
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L 
), .Dim = c(10L, 10L), .Dimnames = list(NULL, NULL)) 

dim(mat[apply(mat, 1, any), apply(mat, 2, any)]) 
#[1] 7 4 

このゼロのみを含む行と列を削除します。行と列に少なくとも1つの1が含まれるようにするには、次のようにします。

0

あなたが効果的に求めている「どのように多くの行と列に等しい要素を持つ部分行列の7x4寸法を抽出する方法を知っていただきたいと思いますそれらに1つを持っている? "これらの質問はapplyを使用して最も簡単に答えています

apply(M,1,any) 
apply(M,2,any) 

はあなたに非ゼロのものが含まれ、それぞれの行と列の数を教えてくれます。

非ゼロネスのためのテストは本当にあなたの問題ではありません場合は、それ以外の目的の行のTRUEFALSEを返す関数でanyを交換してください。

サブマトリクスを形成することが保証できない場合(つまり、長方形ではない場合)、これ以上の作業を行う必要があります。

0

あなたは試すことができます:

apply(which(matrix==1, arr.ind = T), 2, function(x) length(unique(x))) 
row col 
    7 4 
0

をあなたはスパース行列に強制し、インデックススロットを抽出できます。

library(Matrix) 
m <- as(M, "TsparseMatrix") 
#row dim: 
diff(range([email protected])) + 1L 
#[[1] 7 

#column dim: 
diff(range([email protected])) + 1L 
#[1] 4 

私は、これは非常に効率的であることを期待し、/格納するのに便利かもしれませんとにかくあなたの行列を疎行列として扱う。

関連する問題