随机化两个值之间的矩阵元素,同时保持行和列总和固定 (MATLAB)

2023-12-27

我遇到了一些技术问题,但我觉得使用 MATLAB 强大的工具集应该可以实现。

我拥有的是一个由 0 和 w 组成的随机 n × n 矩阵,例如生成的

A=w*(rand(n,n)<p);

w 的典型值为 3000,但这应该不会太重要。

现在,这个矩阵有两个重要的量,向量

c = sum(A,1); 
r = sum(A,2)';

这是两个行向量,第一个表示每列的总和,第二个表示每行的总和。

接下来我想做的是随机化 w 的每个值,例如在 0.5 和 2 之间。我会这样做

rand_M = (0.5-2).*rand(n,n) + 0.5
A_rand = rand_M.*A;

但是,我不想只选择这些随机数:我希望它们对于每一列和每一行,总和仍然等于 c 和 r 的元素。因此,为了稍微清理一下符号,假设我们定义

A_rand_c = sum(A_rand,1);
A_rand_r = sum(A_rand,2)';

我希望所有人都能如此j = 1:n, A_rand_c(j) = c(j) and A_rand_r(j) = r(j).

我正在寻找一种以我认为的算法方式重新绘制 rand_M 元素的方法,以便最终满足这些要求。

当然,除非我有无限的时间,否则这可能不会真正发生。因此,我接受这些数量属于特定范围:A_rand_c(j)必须是一个元素[(1-e)*c(j),(1+e)*c(j)] and A_rand_r(j) of [(1-e)*r(j),(1+e)*r(j)]。这个 e 我事先定义了,比如说 0.001 之类的。

在寻找方法的过程中有人能够帮助我吗?我尝试过一种随机重新选择数字的方法,但这确实没有任何帮助。它也不必非常高效,我只需要它能够在有限的时间内为规模较大的网络(例如 n = 50)工作。

需要明确的是,最终的输出是矩阵A_rand满足这些约束条件。

编辑: 好吧,经过一番思考,我想用一些 while 语句来遍历矩阵的每个元素可能是可行的。困难的部分是有四种可能性:如果你处于特定元素A_rand(i,j),可能是这样A_rand_c(j) and A_rand_r(i)都太小、都太大或相反。前两种情况很好,因为这样你就可以重新绘制随机数,直到它小于当前值并改善情况。但另外两种情况是有问题的,因为你会改善一种情况,但不会改善另一种情况。我想它必须看看哪些标准不太满足,以便它尝试修复更糟糕的标准。但这不是微不足道的,我想说..


您可以利用以下事实:具有单个非零条目的行/列A自动为您提供同一条目的结果A_rand. If A(2,5) = w它是其列中唯一的非零条目,那么A_rand(2,5) = w以及。还能是什么?

您可以交替查找这些单条目行/列,并为值无关紧要的条目分配随机数。

这是该过程的框架:

  • A_rand=zeros(size(A))是你要填充的矩阵
  • entries_left = A>0是一个二进制矩阵,显示其中的条目A_rand你还需要填写
  • col_totals=sum(A,1)是您仍需要在每一列中添加的金额A_rand
  • row_totals=sum(A,2)是您仍需要在每一行中添加的金额A_rand
while sum( entries_left(:) ) > 0

% STEP 1:
% function to fill entries in A_rand if entries_left has rows/cols with one nonzero entry
% you will need to keep looping over this function until nothing changes
% update() A_rand, entries_left, row_totals, col_totals every time you loop

% STEP 2:
% let (i,j) be the indeces of the next non-zero entry in entries_left
% assign a random number to A_rand(i,j) <= col_totals(j) and <= row_totals(i)
% update() A_rand, entries_left, row_totals, col_totals

end

update()
    A_rand(i,j) = random_value;
    entries_left(i,j) = 0;
    col_totals(j) = col_totals(j) - random_value;
    row_totals(i) = row_totals(i) - random_value;
end

选取范围为random_value可能有点棘手。我能想到的最好的办法是从一个相对狭窄的分布中得出它N*w*p where p是进入的概率A非零(这将是行/列总计的平均值)。

这不能很好地扩展到大型矩阵,因为它会随着n^2复杂。我在 200 x 200 矩阵上对其进行了测试,大约需要 20 秒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机化两个值之间的矩阵元素,同时保持行和列总和固定 (MATLAB) 的相关文章

  • 来自索引范围 Swift 的新数组

    我怎样才能做这样的事情 从数组中取出前 n 个元素 newNumbers numbers 0 n 目前出现以下错误 error could not find an overload for subscript that accepts th
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • JavaScript 数组和对象除了 .length 属性之外有什么区别?

    我认为 JS 数组只是一个哈希映射 它只接受整数值作为键 length 属性只返回最大索引 1 这是正确的吗 还有其他区别吗 您错了 数组可以有任何你想要的键 此外 他们还继承了Array原型
  • 使用 forge(或其他 JavaScript 方法)生成随机大素数

    我需要在 JavaScript 中生成一个随机大 大约 4096 位 素数 并且我已经在使用 forge Forge 必须有某种生成器来完成此类任务 因为它实现了 RSA 而 RSA 也依赖于随机素数 然而 当你只想获得一个随机素数 类似于
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • 如何从列表创建多维数组?

    我在 MySQL 中有一个带有父 ID 的类别列表 如何从列表中创建 PHP 数组 ID Category Parent ID 1 Car NULL 2 Education NULL 3 Mathematics 2 4 Physics 2
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 将 numpy 代码点数组与字符串相互转换

    我有一个很长的 unicode 字符串 alphabet range 0x0FFF mystr join chr random choice alphabet for in range 100 mystr re sub W mystr 我想
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • C 中的指针、数组、字符串和 Malloc

    我目前正在学习 C 语言中的字符串 指针和数组 我尝试编写一个程序 其中数组保存三个指向字符串地址的指针 这一切似乎都有效 但程序的行为很奇怪 这是代码 char getUserDetails char host localhost cha
  • C 中函数参数中的固定数组或指针之间的区别?

    之间有区别吗 void draw line float p0 2 float p1 2 float color 4 和这个 void draw line float p0 float p1 float color in C 项目清单 C 和
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 如何从嵌套的对象数组中获取每个父级的值

    所以我有多个对象数组 每个对象都包含一个子对象 e g const data id 1 name parent 1 children id c1 name child 1 children id g1 name grand 1 childr
  • 将 NumPy 数组按元素映射到更多维度的数组

    我想要地图anumpy array从 NxM 到 NxMx3 其中三个元素的向量是原始条目的函数 lambda x f1 x f2 x f3 x 然而 像这样的事情numpy vectorize不允许改变尺寸 当然 我可以创建一个零数组并进
  • Postgres JSONB:数组数组的 where 子句

    postgres 中有 v 9 5 如果有的话 create table json test id varchar NOT NULL data jsonb NOT NULL PRIMARY KEY id 其中 data 是 json 并且包
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 为什么我的规范化路径带有前缀 \\?\

    我正在开发一个个人项目 试图通过规范化 Rust 中的相对路径来解决该项目 然而 每当我这样做时 新路径都会以一个奇怪的前缀 顺序 例如 简单的事情如下 let p fs canonicalize unwrap println p disp
  • SQL循环遍历所有表并获取特定列的最大值

    我正在尝试创建一个审核表来检查该表的加载日期 基本上 我想循环遍历数据库中的所有表并检查特定列 LoadedDate并返回每个表的该列的最大值 SELECT TABLE NAME INTO TableList FROM INFORMATIO
  • Android Facebook 对话框

    我已将 Facebook 集成到我的应用程序中 但是 它不是在对话框中显示 而是全屏打开 我想知道是否有人知道如何将其更改为对话框 Facebook 处理程序类 Override public void onCreate Bundle sa
  • 无法连接到总线:没有这样的文件或目录

    我创建了一个 docker 16 4 容器并尝试在容器内运行 docker 继这篇文章之后 https www digitalocean com community tutorials how to install and use dock
  • 使用 MS 编译器的 std::cout 非常慢

    我正在打印多次计算迭代的进度 输出实际上是其中最慢的部分 但只有当我使用 Visual C 编译器时 MinGW 在同一系统上才能正常工作 考虑以下代码 include
  • 实现 HttpSessionListener

    我面临着一个类似的问题 https stackoverflow com questions 1439743 whats wrong with my listener in my web xml并了解到我的侦听器类将在读取 web xml 时
  • Python、SQLite3:当提交介入时游标返回重复项

    此 Python 代码创建一个表 向其中插入三行并迭代这些行 并在游标完全耗尽之前进行干预提交 为什么它返回五行而不是三行 如果删除干预提交 则返回的行数如预期为 3 或者是否预期提交 甚至不触及相关表 会使游标无效 Edit 添加了忘记的
  • jQuery 的 .isWindow 方法?

    我试图从 jQuery 的动画函数中了解我能做什么 但最终遇到了各种我不理解的内部函数 最终落在了 isWindow 上 isWindow 的代码检查对象是否具有该属性setInterval 否则返回 false 当然 任何对象都可以具有以
  • 如何仅对一个 .vue 文件禁用 vue/multi-word-component-names eslint 规则?

    我正在使用Vue ESLint 插件 https eslint vuejs org 它有一个规则不允许使用单个单词的组件名称 https eslint vuejs org rules multi word component names h
  • PHP upload_max_filesize

    我的 php 文件上传有问题 在我的 php ini 中 upload max filesize 设置为 4mb 当我尝试上传大于该文件的文件时 我从未像预期的那样收到 UPLOAD ERR INI SIZE 错误 但页面再次显示表单 但没
  • 适用于 Google BigQuery 标准 SQL 的任何 JDBC 驱动程序

    我需要 JDBC 驱动程序将我的应用程序连接到 Google BigQuery 我尝试了 CData JDBC 驱动程序 但它不支持所有类型的标准 SQL 查询 还有其他完整的选择吗 官方BigQuery 的 JDBC 驱动程序 https
  • 即复杂的子域cookie问题

    我所有的 cookie 在子域上都工作得很好 但如果子域中有 那么 cookie 根本不会被读取 也根本不会正确 以下是我的测试结果 它将自我解释 justlife demo com works fine just life demo co
  • 如何通过 Google Tag Manager for Next-Js 设置 Google Analytics?

    以前我使用react ga npm 模块在我的下一个js 应用程序中插入谷歌分析 就是这样 import ReactGA from react ga export const initGA gt ReactGA initialize UA
  • 当新子项添加到 Firebase 数据库时发送通知

    我在我的应用程序中使用 Firebase 数据库 当新订单添加到数据库 新子添加到数据库 时 我需要向管理员发送通知 我发现了一个名为 Firebase 云消息传递的东西 但我不知道如何使用它 有什么帮助吗 Firebase Cloud M
  • 使用动态参数查询 Diesel 表

    我开始考虑使用 Diesel 来查询数据库 我有一个类似于下面结构的表格 这只是一个玩具项目 旨在帮助我了解 Diesel 的工作原理 derive Queryable Insertable table name posts struct
  • ServletContextListener 严重:配置类 marktest.Config 的应用程序侦听器时出错

    我的 Java servlet 似乎抱怨它找不到包 marktest 中包含的文件 我使用 Eclipse Indigo 和 Tomcat7 进行开发 这是错误 SEVERE Error configuring application li
  • 选择除一个元素之外的所有主体

    我试图选择 jQuery 中除 this 或悬停的元素之外的所有主体元素 我试图让身体达到一定的不透明度 但 这个 是为了保持其不透明度 这是我的代码 content img mouseenter function this animate
  • 自定义形状旋转问题

    我正在尝试围绕其中心旋转自定义形状 但无法获得预期的结果 我想要的是 形状应绕其中心旋转而不移动自身 我的解决方案目前正在做的是围绕其中心旋转整个形状 每次旋转都会改变其位置 我有多个形状 所以我创建了一个类来封装形状及其在以下类中的转换
  • CSS:百分比最小高度元素嵌套在百分比最小高度元素中

    我想让 html body 和wrapper 元素的最小高度都为 100 以便覆盖整个查看窗口 但我发现我只能使 html 遵守此声明 html body wrapper min height 100 html border 2px red
  • 随机化两个值之间的矩阵元素,同时保持行和列总和固定 (MATLAB)

    我遇到了一些技术问题 但我觉得使用 MATLAB 强大的工具集应该可以实现 我拥有的是一个由 0 和 w 组成的随机 n n 矩阵 例如生成的 A w rand n n