You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中Fortran的eoshift非循环移位等效内置方法问询

Julia中对应Fortran eoshift 的原生实现方法

Fortran中的循环移位函数cshift在Julia里有直接对应的circshift,但非循环移位函数eoshift(移位后用指定值填充新空位)没有内置同名函数,你可以用数组切片的方式实现原生高效的版本,替代原有的对角矩阵模拟方法。

原生实现代码

function eoshift(x::AbstractArray, k::Integer, fillval=0)
    n = length(x)
    k == 0 && return copy(x)
    k > 0 ? vcat(x[k+1:end], fill(fillval, k)) : vcat(fill(fillval, -k), x[1:n+k])
end

示例验证

  • 向右移位2位(正k值,原数组起始部分被截断,末尾补0):
    eoshift([1:9;], 2)  # 输出:[3, 4, 5, 6, 7, 8, 9, 0, 0]
    
  • 向左移位2位(负k值,原数组末尾部分被截断,开头补0):
    eoshift([1:9;], -2) # 输出:[0, 0, 1, 2, 3, 4, 5, 6, 7]
    
  • 自定义填充值(比如用-1填充空位):
    eoshift([1:9;], 3, -1) # 输出:[4, 5, 6, 7, 8, 9, -1, -1, -1]
    

优势说明

相比原有的diagm(k=> ones(length(x)-abs(k)))*x矩阵乘法实现,切片方式直接操作数组元素,避免了不必要的矩阵构造和乘法运算,性能更优,逻辑也更直观。

内容的提问来源于stack exchange,提问作者aitzkora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:52:08