【问题标题】:typeerror while converting Pyobject to java array将 Pyobject 转换为 java 数组时出现类型错误
【发布时间】: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);

标签: android-studio chaquopy


【解决方案1】:

问题是由于数组被转置导致的,因此不连续。

此问题已在 Chaquopy 9.0.0 中修复。 对于旧版本,您可以通过返回原始数组 (X_sample) 或在转置后复制 (@987654322) 来解决此问题@)。

【讨论】:

  • 这行得通。谢谢你。我努力在评论部分格式化代码,没有考虑编辑问题。对此感到抱歉
猜你喜欢
  • 2012-03-12
  • 2020-01-22
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 2023-01-26
相关资源
最近更新 更多