首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从序列创建关系矩阵(Matlab)

从序列创建关系矩阵(Matlab)
EN

Stack Overflow用户
提问于 2015-09-23 16:19:47
回答 2查看 123关注 0票数 0

我有一个序列S:

代码语言:javascript
复制
  S= 'ABCD' % which means A<B<C<D

我想把S转换成矩阵Mi,j,它必须满足以下条件:

代码语言:javascript
复制
   M[i,j] , M[j,i] are random
   M[i,i] =0.5
   M[i,j] + M[j,i] = 1
   M[i,j] < M[j,i] % For example: if A<B then M[A,B] < M[B,A]

例如:如果我们有S= 'ABCD',则M矩阵预期如下:

代码语言:javascript
复制
      A      B    C    D
   A  o.5  0.25  0.2   0.1
   B  0.75 0.5   0.35  0.15
   C  0.8  0.65  0.5   0.4
   D  0.9  0.85  0.6   0.5

如何从给定的序列中创建这样的矩阵?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-23 17:24:17

从你的问题看,你似乎想要

  • 用均匀分布在区间(0,0.5)上的随机项填充矩阵的下半部分(从而满足您问题中的条件4);
  • 然后根据条件3计算上半部分;以及
  • 对角线由条件2决定。

你可以这样做:

代码语言:javascript
复制
n = 4; %// size
M = NaN(n); %// preallocate
M(1:n+1:end) = 0.5; %// fill diagonal
ind_lower = tril(true(n), -1); %// logical index for lower part
M(ind_lower) = 0.5*rand(n*(n-1)/2, 1); %// fill lower part
M_aux = NaN(n); %// auxiliary variable to fill upper part
M_aux(ind_lower) = 1-M(ind_lower).';
M_aux = M_aux.';
M(ind_lower.') = M_aux(ind_lower.'); %// fill upper part

举例结果:

代码语言:javascript
复制
M =
    0.5000    0.5214    0.7573    0.5999
    0.4786    0.5000    0.9291    0.7891
    0.2427    0.0709    0.5000    0.5421
    0.4001    0.2109    0.4579    0.5000
票数 3
EN

Stack Overflow用户

发布于 2015-09-23 18:44:36

以下是另一种类似的方法:

代码语言:javascript
复制
n = 4;
M = tril(rand(n)*0.5, -1);
P = triu(1-M.', 1);
M = M + P + eye(n)*0.5;

结果:

代码语言:javascript
复制
M =

   0.500000   0.987433   0.711005   0.944642
   0.012567   0.500000   0.782633   0.902365
   0.288995   0.217367   0.500000   0.783708
   0.055358   0.097635   0.216292   0.500000
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32744677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档