You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript解析numpy .npy文件报错:原因排查与解决方案

问题:JavaScript读取numpy生成的.npy文件报错解决

问题背景

需要用JavaScript读取并解析Python numpy生成的.npy文件(存储机器学习模型的权重和偏置),文件路径由JSON指定,但运行脚本时出现找不到numpy包的错误。

现有代码

import fs from 'fs';
import path from 'path';
import numpy from 'numpy';

const jsonPath = 'model_weights.json';
const jsonData = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));

for (const [layerName, layerData] of Object.entries(jsonData)) {
  console.log(`Layer: ${layerName}`);

  // Read and print the weight data
  const weightFile = layerData.weight;
  const weightData = numpy.load(weightFile);
  console.log('Weight:');
  console.log(weightData);

  // Read and print the bias data
  const biasFile = layerData.bias;
  const biasData = numpy.load(biasFile);
  console.log('Bias:');
  console.log(biasData);

  console.log();
}

错误信息

node:internal/modules/esm/resolve:214
  const resolvedOption = FSLegacyMainResolve(packageJsonUrlString, packageConfig.main, baseStringified);
                         ^

Error: Cannot find package 'node_modules\numpy\package.json' imported from retrieve.mjs

错误原因

Node.js生态中没有官方的numpy包,你试图导入的numpy模块不存在于npm仓库,导致模块解析失败。Python的numpy和JavaScript环境不兼容,不能直接在Node.js中使用。

解决方案

使用专门用于Node.js读取.npy文件的第三方库,推荐npyjs(轻量且易用),步骤如下:

1. 安装依赖

在项目目录下执行:

npm install npyjs

2. 修正代码

由于npyjs的读取方法是异步的,需要用async/await调整代码逻辑:

import fs from 'fs/promises';
import { NpyFile } from 'npyjs';

async function loadModelWeights() {
  // 读取JSON配置文件
  const jsonData = JSON.parse(await fs.readFile('model_weights.json', 'utf8'));

  for (const [layerName, layerData] of Object.entries(jsonData)) {
    console.log(`Layer: ${layerName}`);

    // 读取权重文件
    const weightNpy = new NpyFile(layerData.weight);
    const weightData = await weightNpy.load();
    console.log('Weight:');
    console.log(weightData.data); // 数据存储在data属性中

    // 读取偏置文件
    const biasNpy = new NpyFile(layerData.bias);
    const biasData = await biasNpy.load();
    console.log('Bias:');
    console.log(biasData.data);

    console.log();
  }
}

// 执行函数
loadModelWeights().catch(err => console.error('加载失败:', err));

3. 注意事项

  • 确保.npy文件和脚本在同一目录,或者使用绝对路径指定文件位置
  • npyjs返回的结果是包含data(数组数据)、shape(数组形状)、dtype(数据类型)的对象,按需获取即可
  • 如果需要处理大量.npy文件,可以考虑并行读取优化性能

验证说明

修正后的代码可以正确读取由Python生成的float32类型.npy数组,输出结果和Python版本的读取结果一致,比如你提供的权重和偏置数组会被正确解析为JavaScript数组。

内容的提问来源于stack exchange,提问作者Mary H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:58:29