楼主: 统计R浪人
9972 7

[问答] R如何统计一个矩阵中的数值是0的个数和如何生成稀疏均匀分布的随机矩阵 [推广有奖]

  • 0关注
  • 3粉丝

博士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
26 个
通用积分
28.6295
学术水平
18 点
热心指数
25 点
信用等级
10 点
经验
2097 点
帖子
132
精华
0
在线时间
221 小时
注册时间
2013-5-22
最后登录
2025-10-26

楼主
统计R浪人 发表于 2013-5-23 20:06:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
R如何统计一个矩阵中的数值是0的个数?

R如何实现Matlab 中生成稀疏均匀分布的随机矩阵即:A=sprand(10,10, 0.6),R中好像没有现成函数,感觉好麻烦,请大家指教下?
谢谢!!!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:均匀分布 MATLAB atlab matla 如何实现 矩阵 如何

沙发
小乖猫 发表于 2013-5-23 20:11:40
这个很容易解决,你需要编写代码~~~
人生重要的不是所站的位置,而是所朝的方向。

藤椅
统计R浪人 发表于 2013-5-23 20:50:50
nInternalUnits=10
internalWeights=0
connectivity=0.6
success1 = 0
success = 0
k=0                                             
while(success == 0)
   {
    # following block might fail, thus we repeat until we obtain a valid
    # internalWeights matrix
   
        internalWeights=matrix(runif(nInternalUnits*nInternalUnits,0,1),nrow=nInternalUnits,ncol=nInternalUnits,byrow=TRUE)
        while(runif(nInternalUnits*nInternalUnits,0,1)==0&&success1==0)
          {
               k=k+1
               if(k==(1-connectivity)*nInternalUnits*nInternalUnits)
                  {
                      internalWeights<-matrix(runif(nInternalUnits*nInternalUnits,0,1),nrow=nInternalUnits,ncol=nInternalUnits,byrow=TRUE);
                      success1 = 1
                  }
            
           }
         if(success1 == 1)
           {
               internalWeights[internalWeights!=0] = internalWeights[internalWeights!=0]  - 0.5;
               maxVal = max(abs(eigen(internalWeights,only.values = TRUE)$values));
               internalWeights = internalWeights/maxVal;
               success = 1

           }
         
    }
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
关键是while(runif(nInternalUnits*nInternalUnits,0,1)==0&&success1==0)统计矩阵中的0的个数不会

板凳
qoiqpwqr 发表于 2013-5-23 22:52:49
统计R浪人 发表于 2013-5-23 20:50
nInternalUnits=10
internalWeights=0
connectivity=0.6
sum(x == 0)

报纸
bobguy 发表于 2013-5-24 06:45:56
统计R浪人 发表于 2013-5-23 20:50
nInternalUnits=10
internalWeights=0
connectivity=0.6
It seems very complicated. Here is a simple one with 30% zeros

n<- 6
y<- runif(n*n)>0.3
y
x <- matrix(y*runif(n*n), ncol=n)
x

地板
bobguy 发表于 2013-5-24 06:59:49
Here are R codes from R package


##' @title Random Sparse Matrix
##' @param nrow,
##' @param ncol number of rows and columns, i.e., the matrix dimension
##' @param nnz number of non-zero entries
##' @param rand.x random number generator for 'x' slot
##' @param ... optionally further arguments passed to sparseMatrix()
##' @return a sparseMatrix of dimension (nrow, ncol)
##' @author Martin Maechler

library(Matrix)
rSparseMatrix <- function(nrow, ncol, nnz,
                          rand.x = function(n) round(rnorm(nnz), 2), ...)
{
  stopifnot((nnz <- as.integer(nnz)) >= 0,
            nrow >= 0, ncol >= 0, nnz <= nrow * ncol)
  sparseMatrix(i = sample(nrow, nnz, replace = TRUE),
               j = sample(ncol, nnz, replace = TRUE),
               x = rand.x(nnz), dims = c(nrow, ncol), ...)
}

M1 <- rSparseMatrix(1000, 20, nnz = 200)
summary(M1)

7
统计R浪人 发表于 2013-5-24 09:39:07
ibrary(Matrix)
rSparseMatrix <- function(nrow, ncol, nnz,
                          rand.x = function(n) round(rnorm(nnz), 2), ...)
{
  stopifnot((nnz <- as.integer(nnz)) >= 0,
            nrow >= 0, ncol >= 0, nnz <= nrow * ncol)
  sparseMatrix(i = sample(nrow, nnz, replace = TRUE),
               j = sample(ncol, nnz, replace = TRUE),
               x = rand.x(nnz), dims = c(nrow, ncol), ...)
}

M1 <- rSparseMatrix(1000, 20, nnz = 200)
summary(M1)

谢谢了!
但是如何调整下生成矩阵的非零数值个数等于指定的数呢?

8
bobguy 发表于 2013-5-24 09:49:17
统计R浪人 发表于 2013-5-24 09:39
ibrary(Matrix)
rSparseMatrix = 0, ncol >= 0, nnz
M1 <- rSparseMatrix(1000, 20, nnz = 100)

In the case,
M1=1000x20 with # of non zero=100

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 10:13