【问题标题】:Slicing Multidimensional Array by a variable按变量切片多维数组
【发布时间】:2018-03-29 07:44:18
【问题描述】:

我正在编写一个方法,它接受一个二维数组和一个 int 行号作为参数,并返回给定行中元素的最大值。

看起来像这样:

function getHighestInRow(A, i)
        return(maximum(A[:i,:]))
end

我遇到的问题是当我用

切片数组时
A[:i,:]

我收到一个参数错误,因为 :i 使 i 得到不同的处理。

代码在另一个方向上工作

A[:,i,:]

有没有办法逃脱冒号?以便i 在冒号后被视为变量?

【问题讨论】:

  • 为了获得更好的性能,最好使用 view 或使用 for 循环显式编码
  • 你这么认为?值得在实践中测试。
  • A[i,:] 创建一个新向量。正确的?太浪费了。
  • 当然,但有时小视图也不是很快。让我试试看。
  • 你是对的,视图总是更快。当切片速度更快时,我永远无法弄清楚实际规则是什么,我认为这是针对小数组的。

标签: arrays multidimensional-array indexing julia slice


【解决方案1】:

你对冒号做了一些奇怪的事情。在这种情况下,您使用的是符号 :i 而不是 i 的值。只需 getHighestInRow(A,i) = maximum(A[i,:]) 即可。

编辑:正如 Dan Getz 在对该问题的评论中所说,getHighestInRow(A,i) = maximum(@view A[i,:]) 效率更高,因为切片将分配一个临时的不必要的数组。

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 2021-11-23
    • 2014-08-25
    • 2020-03-11
    • 2015-04-10
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多