【问题标题】:Matlab find() function in RR中的Matlab find()函数
【发布时间】:2021-10-17 12:02:32
【问题描述】:

我正在尝试将一些 Matlab 代码转换为 R。代码如下所示:

u= [.4 .5 .1;
    .2 .4 .4;
    .4 .1 .5]
z= find(cumsum(u)>= rand,1)

OUTPUT: e.g. z = 3

数学背景是这样描述的(来自数学 tut. 脚本):

我们创建一个包含列的累积和的向量(其中 我们知道总和为一),生成一个随机数(0-1),然后使用 查找函数以获取累积和向量中的第一个数字 即 >= 随机数。例如,如果我们的 D 向量是 [.5 .5] 50%的时候向量的元素对应的状态 一个将 >= 到随机数。 https://psyarxiv.com/b4jm6/

我尝试使用pracma 包中的find()(文档链接如下),但我不知道如何让它工作。我得到"dims[product...] do not match the length of object" 或大多只是"is.character(what) is not TRUE"...

Matlab 函数:

k = find(x,n) 

返回与 X 中的非零元素对应的前 n 个索引。 https://de.mathworks.com/help/matlab/ref/find.html

find() 来自 R 包 pracma,它似乎只能转换 find(x)https://www.rdocumentation.org/packages/pracma/versions/1.1.0/topics/find

【问题讨论】:

  • 您在寻找which(cumsum(u)>= runif(1))[1]吗?
  • 没有用。它应该对应于案例 k = find(x,n) 的这个 matlab 函数:de.mathworks.com/help/matlab/ref/find.html
  • k = find(x,n) 返回与 X 中的非零元素对应的前 n 个索引。
  • @RuiBarradas:不,它实际上似乎有效。谢谢!!!
  • 请不要添加问题的答案。而是回答你自己的问题并接受它。

标签: r matlab find cumsum


【解决方案1】:

由@Rui Barradas 解决:which(cumsum(u)>= runif(1))[1]

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2011-08-22
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多