Juliaで変更したい属性を持つPythonオブジェクト(JuliaのPyObject)をライブラリが返すPyCall.jlを介してPythonライブラリとインターフェースしようとしています。たとえば、次のダミーの python クラスがあるとします。
import numpy as np
class MyNumpy:
def __init__(self,n,m):
self.array = np.zeros((n,m))
self.size = (n,m)
Julia では、PyCall.jl を使用してこの python クラスをロードし、次のようにインスタンス化します。
using PyCall
mynumpy = pyimport("MyNumpy.MyNumpy")
pyobject = mynumpy(3,3)
...
> pyobject.array
> 3×3 Array{Float64,2}:
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
...
pyobject.array[1,1] = 1.0
> pyobject.array
> 3×3 Array{Float64,2}:
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
コードの最後の行はエラーなしで実行されますが、調査の結果pyobject.array[1,1]
、値は変更されていません (つまり、0.0 のままです)。
JuliaでPycall.jl PyObject属性値を変更するにはどうすればよいですか?たとえば、ポインタを使用してこれを行うことができますか? これが明らかな場合は申し訳ありませんが、運が悪く、PyCall.jl ドキュメントを使用してその方法を理解できません。前もって感謝します。
PS 実際の python ライブラリは、簡単に変更できるものではありません。