【问题标题】:C++ function reads a file with the name 1234.4678.npy as 1234,4678.npyC++ 函数读取名为 1234.4678.npy 的文件为 1234,4678.npy
【发布时间】:2022-12-17 15:34:54
【问题描述】:

我正在尝试使用 cnpy 的 npy_load 函数使用 cnpy 库(C++ 库)读取 .npy 文件。所有文件名的命名格式如下: 1234.4567.npy。 但是,npy_load 函数读取文件,用逗号替换第一个点,算法搜索文件名称: 1234,4567.npy。结果,它引发了以下错误: npy_load:无法打开文件 1234,4567.npy

使用 npy_load 的代码如下:

void getdescriptor(string filename,cv::Mat & descriptor,int nkeypoints){
    cnpy::NpyArray arr = cnpy::npy_load(filename);
    for(int i = 0 ; i < nkeypoints ; i ++){
        float* pdata= descriptor.ptr<float>(i);
        for(int j = 0 ; j < 256 ; j ++ ){
            float temp = arr.data<float>()[i *256 + j];
            pdata[j]= temp;
        }
    }
}

我该如何解决?

【问题讨论】:

  • 你的地方是什么?
  • 在调用npy_load 之前,您是否验证过filename 是您在代码中所期望的?
  • 你确定 npy_load 正在这样做吗?
  • 谢谢你的 cmets。 @molbdnilo,我已经验证文件名是我所期望的。我添加了一个 cout 语句以查看 npy_load 读取的实际名称是什么。奇怪的是前两个文件以正确的方式打印(带点),而下一个文件在 npy_load 之前以逗号打印,而在那之后,代码引发了上面提到的错误。我删除了那个文件,下一个文件的问题仍然存在。
  • 从你的描述来看,文件名实际上是不是你所期望的,而不是 npy_load 与他们混淆。你从哪里得到文件名?

标签: c++ numpy format


【解决方案1】:

最后根据上面的cmets进行了更多的研究,解决了这个问题。 cnpy 库及其 npy_load 函数工作正常。由于语言环境设置的变量 LC_NUMERIC 而引发的问题。我所要做的就是用“en_US.UTF-8”替换这个变量的值:

echo 'export LC_NUMERIC="en_US.UTF-8"' >>~/.bashrc
source ~/.bashrc

问题解决了。

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2014-02-28
    • 1970-01-01
    • 2019-09-10
    • 2022-11-01
    • 2018-03-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多