我该怎么做?
我看到您的帖子说,您可以将java对象传递给Python方法,但这不适用于numpy数组和TensorFlow张量。以下是我尝试过的各种变体,但无济于事。
double[][] anchors = new double[][]{{0.57273, 0.677385}, {1.87446, 2.06253}, {3.33843, 5.47434}, {7.88282, 3.52778}, {9.77052, 9.16828}};
PyObject anchors_ = numpy.callAttr("array", anchors);
我也尝试使用连接创建此连接,但是它不起作用。这是因为连接(和堆栈等)需要包含数组的 names 的序列作为参数传递,而Java中似乎没有办法用Chaquopy做到这一点。
有什么建议吗?
答案 0 :(得分:2)
我认为您收到的错误是“ ValueError:仅接受2个非关键字参数”。
在调用numpy.array
时,Android Studio可能还会发出警告,说“混乱的参数'anchors',不清楚是否需要varargs或non-varargs调用”。这是问题的根源。您打算传递一个double[][]
参数,但不幸的是Java将其解释为五个double[]
参数。
Android Studio应该为您提供将参数强制转换为Object
的自动修复,即:
numpy.callAttr("array", (Object)anchors);
这告诉Java编译器您只打算传递一个参数,然后numpy.array
将正常工作。
答案 1 :(得分:0)
我设法找到了两种将这个玩具数组转换为正确的Python数组的实际方法。
import com.chaquo.python.*;
Python py = Python.getInstance();
PyObject np = py.getModule("numpy");
PyObject anchors_final = np.callAttr("array", anchors[0]);
anchors_final = np.callAttr("expand_dims", anchors_final, 0);
for (int i=1; i < anchors.length; i++){
PyObject temp_arr = np.callAttr("expand_dims", anchors[i], 0);
anchors_final = np.callAttr("append", anchors_final, temp_arr, 0);
}
// Then you can pass it to your Python file to do whatever
将数组传递给Python函数后,例如:
import com.chaquo.python.*;
Python py = Python.getInstance();
PyObject pp = py.getModule("file_name");
PyObject output = pp.callAttr("fnc_head", anchors);
在您的Python文件中,您只需执行以下操作即可:
def fnc_head():
anchors = [list(x) for x in anchors]
...
return result
这些都是用二维阵列测试的。其他数组类型可能需要修改。