- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要明确的是,以下不是我的原始问题,它具有更大的数据,并且此代码位于更大的应用程序和代码库的上下文中。我已将我的工作缩减为最简单的示例,为了清晰和开发和单元测试,现在只是玩具或教学大小,因为这对这些目的以及在 stackexchange 上共享有很大帮助。我在 R 方面有经验,但在 Octave (Matlab)方面没有经验。这是 Octave 版本 4.0.0 的代码。我似乎坚持翻译组计算,如 R 的 tapply() 或 by() 以及编写和调用用户定义的函数(加上比那些内置的一些额外处理),但现在用 Octave 语言编写。
起始状态是一个数组a,如图所示:
a = [5 1 8 0; 2 1 9 0; 2 3 3 0; 5 3 9 0]
a =
5 1 8 0
2 1 9 0
2 3 3 0
5 3 9 0
我需要做的过程本质上就是这样:按第1列分组,找到第3列的最小统计量,返回同一行第2列存储的值,并将该值写入第4列。我要没有要使用的可选包。内置的 accumarray 和 min 函数让我非常接近,但我还没有找到所需的语法。 Matlab 似乎有许多版本的参数传递语法在不同版本上开发,请注意我的代码需要在 Octave 4.0.0 中运行。
所需的最终状态与数组 a 相同,但第 4 列更新如下所示:
a =
5 1 8 1
2 1 9 3
2 3 3 3
5 3 9 1
我最好的几个未遂代码片段和我所有失败尝试中最有趣的事情(没有显示,因为有很多页面的尝试都不起作用)是:
[x,y] = min(a(a(:,1)==5,3),[],1)
x = 8
y = 1
请注意,y 是组内行的索引,但不是数组内的行,这很好,只要我稍后进行计算以将索引从组相关转换为全局相关,并且在其中读取 a(y,2) 的值,这是每一行的正确答案值。
>> [x,y] = min(a(a(:,1)==2,3),[],1)
x = 3
y = 2
>> [~,y] = min(a(a(:,1)==2,3),[],1);
>> y
y = 2
请注意,我只需要 min() 中的 y,因为它是感兴趣的行的索引。
>> accumarray(a(:,1), a(:,3), [], @([~,y]=min([],[],1)))
parse error:
syntax error
请注意,使用某种语法,我需要在其第一个参数中将由 accumarray 的参数 1 和 2 确定的值组传递给 min()。
在 min() 返回行索引 y 之后,我最终需要在组计算中发生这样的事情:
a(y,4) = a(y,2); % y is the desired row index found by min() within each group
因此,我尝试编写一个以可能更简单的语法命名的函数:
>> function idx = ccen(d)
[~,y]=min(d,[],1);
idx=a(y,2);
end
>> accumarray(a(:,1), a(:,3), [], @ccen)
error: 'a' undefined near line 3 column 5
error: called from
ccen at line 3 column 4
accumarray at line 345 column 14
在我看来,令我惊讶的是,函数 ccen 无法访问 a。现在我该怎么办?感谢您的阅读。
最佳答案
在 MATLAB/Octave 中声明函数时,在范围外声明的任何变量(默认情况下)不可访问。这意味着即使您有 a
的声明,当您创建该函数时,a
在该函数的范围内也是不可访问的。
您可以做的是修改 ccen
以便将 a
提供给函数,以便它可以在调用函数时访问变量。之后,在调用 accumarray
时,在对 ccen
的调用周围包装一个匿名函数。然而,匿名函数确实可以捕获未明确声明为函数输入变量的变量范围:
那么首先:
function idx = ccen(a, d) %// Change
[~,y]=min(d,[],1);
idx=a(y,2);
end
现在……
out = accumarray(a(:,1), a(:,3), [], @(x) ccen(a,x)); %// Change last parameter
此调用是可以接受的,因为匿名函数在创建时正在捕获 a
。请注意匿名函数中的 x
是如何从 accumarray
调用中通过管道输入的。您只需将其作为第二个参数转发给 ccen
并保持 a
不变。这不会改变函数的运行方式....它只是解决范围问题。
我在 Octave 中得到以下内容:
octave:10> a = [5 1 8 0; 2 1 9 0; 2 3 3 0; 5 3 9 0]
a =
5 1 8 0
2 1 9 0
2 3 3 0
5 3 9 0
octave:11> function idx = ccen(a,d)
> [~,y]=min(d,[],1);
> idx=a(y,2);
> end
octave:12> out = accumarray(a(:,1), a(:,3), [], @(x) ccen(a,x))
out =
0
1
0
0
1
关于arrays - 使用 accumarray 和用户定义函数返回第三列值的 Octave 组统计计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952162/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!