【发布时间】:2020-10-13 02:05:02
【问题描述】:
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
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 is not contiguous
【问题讨论】:
-
听起来您可能正在尝试将一维 Numpy 数组转换为二维 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(__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 代码:
if(!Python.isStarted()) Python.start(new AndroidPlatform(this)); Python py = Python.getInstance(); PyObject pyobj = py.getModule("featureExtraction"); PyObject obj = pyobj.callAttr("build_feat","107_2b4_Pl_mc_AKGC417L_0.wav"); double[][] feat = obj.toJava(double[][].class);