首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将二维数组传递给julia中的函数

将二维数组传递给julia中的函数
EN

Stack Overflow用户
提问于 2015-09-09 03:29:27
回答 4查看 1.2K关注 0票数 5

我有一个三维数组,定义如下:

代码语言:javascript
运行
复制
x=zeros(Float64,2,2,2)

我希望通过将x传递给一个函数,一次一层地将1赋给x。该函数为:

代码语言:javascript
运行
复制
function init(p,y)
   y=ones(p,p)
end

我将按如下方式传递x

代码语言:javascript
运行
复制
for k=1:2
   init(2,x[2,2,k])
end

但是当我这样做的时候,x是0,而不是1。为什么?

代码语言:javascript
运行
复制
julia> x
2x2x2 Array{Float64,3}:
[:, :, 1] =
 0.0  0.0
 0.0  0.0

[:, :, 2] =
 0.0  0.0
 0.0  0.0

你知道怎么让朱莉娅给x赋值吗?

EN

Stack Overflow用户

发布于 2020-12-30 02:41:21

在Julia中发生了很多变化,我想我应该更新这个答案以反映Julia 1.5 (可能大多数更改是1.0)。虽然我希望现代的x[:, :, k]能够工作,因为它仍然被称为SubArray,实际上是在表达式中复制。相反,您必须使用view()

代码语言:javascript
运行
复制
x= zeros(2, 2, 2)

function init!(y)
    y[:]= ones(size(y))
end

init!(view(x, :, :, 1))   # get reference to original items

这将为您提供所需的结果:

代码语言:javascript
运行
复制
julia> x
2×2×2 Array{Float64,3}:
[:, :, 1] =
 1.0  1.0
 1.0  1.0

[:, :, 2] =
 0.0  0.0
 0.0  0.0

也有帮助器宏,用于以更容易接受的形式编写它,

代码语言:javascript
运行
复制
init!(@view x[:,:,1])

但是,如果您有其他论点,则可能会出现贪婪宏解析的危险,例如

代码语言:javascript
运行
复制
otherfunc!(@view x[:,:,1], 10)

会给你一个错误的Invalid use of @view macro: argument must be a reference expression。为了解决这个问题,有一个杂乱无章的@views,它把所有的_SubArray_s都变成视图,或者你也可以把参数放在括号里。

代码语言:javascript
运行
复制
otherfunc!(@views x[:,:,1], 10)
otherfunc!(@view( x[:,:,1]), 10)

您可以在以下演示文稿中找到有关处理数组和矩阵的更多信息:(Youtube) Arrays: slices and views

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32465746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档