楼主: priss111
4519 11

求助:如何在splus中生成块大小不同的 block diagnoal sparse matrix? [推广有奖]

  • 0关注
  • 5粉丝

已卖:9份资源

副教授

16%

还不是VIP/贵宾

-

威望
0
论坛币
153 个
通用积分
47.5396
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
14935 点
帖子
472
精华
0
在线时间
808 小时
注册时间
2008-3-30
最后登录
2025-3-17

楼主
priss111 发表于 2010-4-19 09:49:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教大侠:

    比如现在我想生成一个block diagnoal sparse matrix, 其中包括100个块,但是1.每个块的大小可能不同(比如根据家庭成员的多少而确定每个块的大小);2.  假定每个块的大小为n*n(n由家庭成员的多少决定),每个块中左上角的四个元素均为是c(1,0,0,1),右下角元素个数为(n-2)*(n-2),且元素均为1;3. 每个块其他元素均为0;
    根据上述3个特点生成一个块为100的块对角稀疏矩阵。

请问哪位大侠能够帮忙把这个bdsmatrix在splus中生成?

非常非常感谢!
QQ:262381007
二维码

扫码加我 拉你入群

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

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

关键词:diagnoal matrix sparse block PLUS matrix splus block sparse diagnoal

回帖推荐

epoh 发表于9楼  查看完整内容

最简单的方法,手动调整, 而且不会错误. 假设是2个对角块 只要改这行就可 for (i in seq_along(x)) 改成 for (i in :1:2) 假设是3个对角块 只要改这行就可 for (i in seq_along(x)) 改成 for (i in 1:3)

epoh 发表于7楼  查看完整内容

有人已帮你写好程序, 你只要依你的需求,写入参数执行即可. bds.matrix(c(4,5,6)) or bds.matrix(c(4,5,6,7,8))

epoh 发表于3楼  查看完整内容

Try Package ‘bdsmatrix’ This is a special case of sparse matrices, used by coxme and kinship function bdsmatrix(blocksize, blocks, rmat, dimnames) bdsmatrix Create a sparse symmetric block diagonal matrix object

epoh 发表于11楼  查看完整内容

a=bds.matrix(c(4,5,6)) r=seq(1:15) c=seq(1:15) rownames(a)=r colnames(a)=c a >a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 4 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 1 1 1 0 0 0 0 ...

本帖被以下文库推荐

沙发
priss111 发表于 2010-4-19 10:41:37
急需,
请大侠帮忙!

藤椅
epoh 发表于 2010-4-19 12:10:39
Try Package ‘bdsmatrix’
This is a special case of sparse matrices, used by coxme and kinship

function bdsmatrix(blocksize, blocks, rmat, dimnames)
bdsmatrix Create a sparse symmetric block diagonal matrix object

板凳
priss111 发表于 2010-4-19 12:22:12
3# epoh

非常感谢2楼的大侠。

除了利用bdsmatrix & kinship函数设置的矩阵外,还需要设置一个我所求助的这样一个bdsmatrix,可是怎么也设置不出来。用bdsmatrix.idb也只能设置出一个块。不知道我哪里错了。
不知道你是否能够帮忙我仔细看看这我现在所求助的这个矩阵具体怎么设置,非常感谢!!!!!!

报纸
epoh 发表于 2010-4-19 16:35:43
哈哈!解决了吧.

地板
priss111 发表于 2010-4-19 16:51:09
5# epoh

就是没有解决啊?  我还要设置一个所求助的这个bdsmatrix ,你要是比较常用splus的话,麻烦 你看帮忙我具体看看这个矩阵怎么设置。非常非常感谢!

7
epoh 发表于 2010-4-19 17:00:04
有人已帮你写好程序,
你只要依你的需求,写入参数执行即可.
bds.matrix(c(4,5,6))
or
bds.matrix(c(4,5,6,7,8))

8
priss111 发表于 2010-4-19 17:19:52
7# epoh

,对太感谢她了。 可是我在SPLUS里运行了,出现下面 problem.

> bds.matrix <- function(x) {
+    stopifnot(is.numeric(x) & all(x > 2))
+     m <- diag(sum(x))
+     s <- c(0, cumsum(x))
+     for (i in seq(along.with(x))) {
+         j <- (s + 3) : s[i + 1]
+         m[j, j] <- 1
+     }
+     m
+ }
> bds.matrix(c(4,6,7))
Problem in bds.matrix(c(4, 6, 7)): Couldn't find a function definition for "along.with"
Use traceback() to see the call stack
>

你看你能不能帮我解决一下这个problem 问题啊!

她是在R里写的 seq_along(x), 我看了splus里的帮助,用seq(along.with(x))替换,可是仍然有problem, 大侠你能不能帮我仔细看看啊? 非常感谢!

都整好几天了,汗..........

9
epoh 发表于 2010-4-19 18:27:24
最简单的方法,手动调整,
而且不会错误.
假设是2个对角块
只要改这行就可
for (i in seq_along(x))
改成 for (i in :1:2)

假设是3个对角块
只要改这行就可
for (i in seq_along(x))
改成 for (i in 1:3)

10
priss111 发表于 2010-4-19 19:26:01
9# epoh

呵呵,非常感谢你!

不过现在出现的是:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,]    1    0    0    0    0    0    0    0    0     0     0     0     0     0     0
[2,]    0    1    0    0    0    0    0    0    0     0     0     0     0     0     0
[3,]    0    0    1    1    0    0    0    0    0     0     0     0     0     0     0
[4,]    0    0    1    1    0    0    0    0    0     0     0     0     0     0     0
[5,]    0    0    0    0    1    0    0    0    0     0     0     0     0     0     0
[6,]    0    0    0    0    0    1    0    0    0     0     0     0     0     0     0
[7,]    0    0    0    0    0    0    1    1    1     0     0     0     0     0     0
[8,]    0    0    0    0    0    0    1    1    1     0     0     0     0     0     0
[9,]    0    0    0    0    0    0    1    1    1     0     0     0     0     0     0
[10,]    0    0    0    0    0    0    0    0    0     1     0     0     0     0     0
[11,]    0    0    0    0    0    0    0    0    0     0     1     0     0     0     0
[12,]    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1
[13,]    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1
[14,]    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1
[15,]    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1

可是要的不是二维这种,
要下面这种一维的:
         1     2    3    4    5    6    7    8    9    10   11   12   13  14   15
  1     1    0    0    0    0    0    0    0    0     0     0     0     0     0     0
  2     0    1    0    0    0    0    0    0    0     0     0     0     0     0     0
  3     0    0    1    1    0    0    0    0    0     0     0     0     0     0     0
  4     0    0    1    1    0    0    0    0    0     0     0     0     0     0     0
  5     0    0    0    0    1    0    0    0    0     0     0     0     0     0     0
  6     0    0    0    0    0    1    0    0    0     0     0     0     0     0     0
  7     0    0    0    0    0    0    1    1    1     0     0     0     0     0     0
  8     0    0    0    0    0    0    1    1    1     0     0     0     0     0     0
  9     0    0    0    0    0    0    1    1    1     0     0     0     0     0     0
10    0    0    0    0    0    0    0    0    0     1     0     0     0     0     0
11    0    0    0    0    0    0    0    0    0     0     1     0     0     0     0
12    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1
13    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1
14    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1
15    0    0    0    0    0    0    0    0    0     0     0     1     1     1     1


你看把[1,] 转为1,

要生成这样的形式, 还需要改动哪里?

非常感谢你!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-13 15:04