JythonのarrayとJavaのarrayは、異なるクラスである。
機能が異なるので当然だ。
JythonのarrayはつまりPythonで規定されているarrayだ。
>>> x = [1.0, 1.0, 1.0, 1.0]
>>> x
[1.0, 1.0, 1.0, 1.0]
Javaのarrayはjarrayモジュールで作れる。
>>> import jarray
>>> ax = jarray.array([0], 'd')
>>> ax
array('d', [0.0])
arrayを引数に取るJavaのメソッド(これは当然Javaのarrayを受け取る)に
Jythonのarrayを渡しても、不平を言わずに動作する。
>>> from java.lang import String
>>> s = String(['n', 'e', 'k', 'o'])
>>> s
neko
そして上手くいっているように見える。
ところが、引数のarrayに作用するメソッドの場合、このやり方だと効果が何も得られない。
>>> from java.util import Arrays
>>> x = [0, 0, 0, 0]
>>> Arrays.fill(x, 1)
>>> x
[0, 0, 0, 0]
引数のarrayに作用するJavaメソッドの場合、Javaのarrayにしてから渡すとよい。
>>> from java.util import Arrays
>>> import jarray
>>> x = [0, 0, 0, 0]
>>> jx = jarray.array(x, 'd')
>>> jx
array('d', [0.0, 0.0, 0.0, 0.0])
>>> Arrays.fill(jx, 1)
>>> jx
array('d', [1.0, 1.0, 1.0, 1.0])
これは期待通りだ。
具体例をもう1つ。
手前味噌だが、Inubuyo Permutation (犬ぶよ置換)パッケージから。
>>> from jp.inubuyo.brain.disc.perm import *
>>> sigma = Transposition()
>>> sigma
jp.inubuyo.brain.disc.perm.Transposition[0,1]
>>> x = [1, 2, 3, 4]
>>> sigma.act(x)
array('l', [2L, 1L, 3L, 4L]) ←結果はJavaのarray
>>> x
[1, 2, 3, 4] ←変わってない
>>> jx = jarray.array(x, 'l')
>>> sigma.act(jx)
array('l', [2L, 1L, 3L, 4L]) ←結果はJavaのarray
>>> jx
array('l', [2L, 1L, 3L, 4L]) ←変わった
やはり、Jythonのarrayは影響を受けず、Javaのarrayは作用を受ける。
機能が異なるので当然だ。
JythonのarrayはつまりPythonで規定されているarrayだ。
>>> x = [1.0, 1.0, 1.0, 1.0]
>>> x
[1.0, 1.0, 1.0, 1.0]
Javaのarrayはjarrayモジュールで作れる。
>>> import jarray
>>> ax = jarray.array([0], 'd')
>>> ax
array('d', [0.0])
arrayを引数に取るJavaのメソッド(これは当然Javaのarrayを受け取る)に
Jythonのarrayを渡しても、不平を言わずに動作する。
>>> from java.lang import String
>>> s = String(['n', 'e', 'k', 'o'])
>>> s
neko
そして上手くいっているように見える。
ところが、引数のarrayに作用するメソッドの場合、このやり方だと効果が何も得られない。
>>> from java.util import Arrays
>>> x = [0, 0, 0, 0]
>>> Arrays.fill(x, 1)
>>> x
[0, 0, 0, 0]
引数のarrayに作用するJavaメソッドの場合、Javaのarrayにしてから渡すとよい。
>>> from java.util import Arrays
>>> import jarray
>>> x = [0, 0, 0, 0]
>>> jx = jarray.array(x, 'd')
>>> jx
array('d', [0.0, 0.0, 0.0, 0.0])
>>> Arrays.fill(jx, 1)
>>> jx
array('d', [1.0, 1.0, 1.0, 1.0])
これは期待通りだ。
具体例をもう1つ。
手前味噌だが、Inubuyo Permutation (犬ぶよ置換)パッケージから。
>>> from jp.inubuyo.brain.disc.perm import *
>>> sigma = Transposition()
>>> sigma
jp.inubuyo.brain.disc.perm.Transposition[0,1]
>>> x = [1, 2, 3, 4]
>>> sigma.act(x)
array('l', [2L, 1L, 3L, 4L]) ←結果はJavaのarray
>>> x
[1, 2, 3, 4] ←変わってない
>>> jx = jarray.array(x, 'l')
>>> sigma.act(jx)
array('l', [2L, 1L, 3L, 4L]) ←結果はJavaのarray
>>> jx
array('l', [2L, 1L, 3L, 4L]) ←変わった
やはり、Jythonのarrayは影響を受けず、Javaのarrayは作用を受ける。