首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 4

Stack Overflow用户

发布于 2015-09-09 21:39:01

一种可能的解决方案是使用slice,它制作了一个SubArray

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

function init!(y)
    y[:] = ones(y)  # change contents not binding
end

for k in 1:2
    init!(slice(x, :, :, k))  # use slice to get SubArray 
end

请注意,您可以使用ones(y)来获取与y大小相同的向量。

SubArray提供了数组的视图,而不是副本。在未来的Julia版本中,默认情况下,索引数组可能会提供此功能,但目前您必须显式执行此操作。

有关值与绑定的讨论,请参见

http://www.johnmyleswhite.com/notebook/2014/09/06/values-vs-bindings-the-map-is-not-the-territory/

编辑:我没有看到@tholy的答案,它包含了同样的想法。

票数 6
EN

Stack Overflow用户

发布于 2015-09-09 16:15:55

我也不确定我是否理解了这个问题,但slice(x, :, :, k)将从x中分到2d部分。

如果您将x初始化为Float64的数组,然后希望为每个元素分配一个矩阵(这似乎是您正在尝试做的),那么这是行不通的- x的类型不允许这样做。您可以使x成为一个Any数组,然后这将是允许的。

票数 5
EN

Stack Overflow用户

发布于 2015-09-09 08:41:45

我不确定我是否理解,但是如果你想修改x的位置,你会想做一些不同的事情。

下面的代码应该可以做你需要的事情。

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

function init!(p, y, k) 
    y[:, :, k] = ones(Float64, p, p) 
end


for k = 1:2
   init!(2, x, k)
end

您可能还想记住,Julia中的标准约定是在修改其参数的函数的名称中包含一个感叹号。如果我理解了您的问题,那么您希望您的init!()函数能够做到这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32465746

复制
相关文章

相似问题

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