Android studio 将Pyobject转换为java数组时发生typeerror
pythor脚本返回2d“float64”numpy数组。当我尝试在java中将其分配给“double”数组时,我得到了以下错误“java.lang.ClassCastException:TypeError:无法将float64对象转换为double[]”Android studio 将Pyobject转换为java数组时发生typeerror,android-studio,chaquopy,Android Studio,Chaquopy,pythor脚本返回2d“float64”numpy数组。当我尝试在java中将其分配给“double”数组时,我得到了以下错误“java.lang.ClassCastException:TypeError:无法将float64对象转换为double[]” 编辑 import librosa as lb import numpy as np from os.path import dirname, join de
编辑
import librosa as lb
import numpy as np
from os.path import dirname, join
def build_feat(fpath):
filename = join(dirname(__file__), fpath)
wav, rate = lb.load(filename, sr=4000)
X_sample = lb.feature.mfcc(wav, sr=rate, n_fft=512, win_length=400, n_mfcc=20,
hop_length = 256, n_mels = 128, fmin = 100, fmax = 1800)
X = X_sample.T
return X
Java代码:
PyObject pyobj = py.getModule("featureExtraction");
PyObject obj = pyobj.callAttr("build_feat","107_2b4_Pl_mc_AKGC417L_0.wav");
double[][] feat = obj.toJava(double[][].class);
对于相同的代码,我现在得到了一个不同的错误:
com.chaquo.python.PyException:ValueError:ndarray不是连续的
问题是由于数组被转置而导致的,因此是非连续的
这个问题在Chaquopy 9.0.0中得到了解决。对于较旧的版本,您可以通过返回原始数组(
X\u sample
)或在转置后制作副本(X\u sample.T.copy()
)来解决此问题。听起来您可能正在尝试将1D Numpy数组转换为2D Java数组。请编辑您的问题,以包括Python和Java代码的相关部分。另外,您使用的是哪个版本的Chaquopy?我使用的是Chaquopy 8.0.1版。import librosa as lb import numpy as np from os.path import dirname,join def build_feat(fpath):filename=join(dirname(u file_u_u),fpath)wav,rate=lb.load(filename,sr=4000)X_sample=lb.feature.mfcc(wav,sr=rate,n_fft=512,win_length=400,n_mfcc=20,hop_length=256,n_mels=128,fmin=100,fmax=1800)X=X_sample.T返回X
Java代码:if(!Python.isStarted())Python.start(新的AndroidPlatform(this));Python py=Python.getInstance();PyObject pyobj=py.getModule(“featureExtraction”);PyObject obj=pyobj.callAttr(“构建专长”,“107_2b4_Pl_mc_AKGC417L_0.wav”);double[][]feat=obj.toJava(double[][]类)代码>这起作用了。非常感谢。我试图在评论部分格式化代码,但没有考虑编辑问题。对不起