【问题标题】:How to delete a row of matrix in julia如何在Julia中删除一行矩阵
【发布时间】:2013-06-25 13:24:33
【问题描述】:

在matlab中,删除矩阵A的第2行是

A(2,:) = [];

如何在Julia中删除一行矩阵?我尝试使用A(2,:) = []。但我失败了。如何解决这个问题?

【问题讨论】:

  • 你为什么要标记这个matlab?这与 MatLab 无关
  • @KronoS 实际上我认为这仍然与 MATLAB 相关,就像许多其他比较问题一样(例如“如何在 Python 中执行此 MATLAB 操作?”)...跨度>
  • 快速更新:对于向量,Julia v0.3 具有 deleteat! 函数,速度非常快。对于矩阵/数组,还是需要使用@EitanT的解决方案

标签: matlab julia


【解决方案1】:

您不能从矩阵中删除一行——Matlab 对此有简单的语法这一事实有点陷阱,因为您必须删除一行的实际方法是创建一个没有该行的副本,所以我们决定使其明确,从而具有更透明的性能特征。您可以更改一维数组的大小,例如正在做push!(v,x)pop!(v)

【讨论】:

  • 更糟糕的是:在 MATLAB 中,为行/列切片创建了一个副本(即使 MATLAB 使用列优先顺序,因此很容易在原始矩阵中创建视图以用于列索引案例)。我认为例外是A(:)reshape(A,..),以及permute(A,..)的某些情况
  • 仅我的 2 美分:我认为性能下降对于任何认真关注性能的人来说都不会太令人惊讶并且此功能真的 不错。例如,我的一个朋友通常对 R 没什么好说的,他真的很喜欢你可以这样做noRow10Mat = mat[-10,]
  • Julia 也会在你切片时创建一个副本:临时文件必须去某个地方......你可以在索引之间创建一个迭代器,而不是改变我想的数组的存储。在数组旁边存储和维护索引结构会产生成本,这很快就会变得一团糟。不,没有简单的方法可以避免复制和分配某些东西。所以,我们有哈希表——如果你要经常改变它们的大小,速度会更快;如果您想进行大量访问,例如矩阵数学运算,则速度较慢。你选择你的数据结构......
【解决方案2】:

我认为这是最短的答案 A[1:size(A,1) .!= 2,: ]

https://groups.google.com/forum/#!topic/julia-dev/goVB9Pp74H4

【讨论】:

  • 你可以在那里使用end。我经常使用A[setdiff(1:end, 2), :],但使用1:end .!= 2 进行索引可能会更快。很好的答案。
【解决方案3】:

我不知道关于 Julia 的第一件事,但我认为它使用方括号 ([]) 表示 indexing,因此您应该尝试以下操作:

A[2, :] = []

我手头没有 Julia 解释器来测试它,但如果它也失败了,那么下面的方法肯定可以工作:

A = A[[1, 3:end], :]

它只是使用选择要保留的行的反向策略。

【讨论】:

【解决方案4】:

以下适用于 Julia 1.7.2

 a = [1 2 3; 4 5 6; 7 8 9]
 a[Not(1), :]

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2014-08-09
    相关资源
    最近更新 更多