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

如何从Azure DataStore中提取已保存的numpy数组?

解决方案

问题根因

直接对self.datastore做字符串转换得到的是Azure存储资源的HTTPS访问链接,np.DataSource默认不携带Azure访问凭证,无法读取私有存储资源,且np.fromfile对HTTP类的流读取兼容性差,同时np.fromfile本身不适配npy格式的结构化二进制文件,才会出现定位失败、格式不符合预期的问题。

方案1:通过Azure ML Datastore下载到本地临时目录读取(适配Azure ML环境)

该方案无需额外处理存储凭证,直接复用现有Datastore的权限,操作最稳妥:

import numpy as np
import os
import tempfile

# 构造目标文件在datastore中的相对路径
target_file_path = f"{self.train_data_outputs_folder}/w2v_emb_{str(self.date_range)}.npy"

# 下载文件到临时目录,自动销毁无需手动清理
with tempfile.TemporaryDirectory() as tmpdir:
    self.datastore.download(
        target_path=tmpdir,
        prefix=target_file_path,
        overwrite=True
    )
    local_file_path = os.path.join(tmpdir, target_file_path)
    # 用np.load读取npy格式,不要用np.fromfile
    dat = np.load(local_file_path)

方案2:直接读取Blob内容到内存,无本地落地

如果不需要本地留存文件,可以直接读取Blob内容到内存流加载:

from azure.storage.blob import BlobClient
import numpy as np
from io import BytesIO

# 构造Blob访问链接,自动处理路径首尾的斜杠
blob_url = f"{str(self.datastore).rstrip('/')}/{self.train_data_outputs_folder.lstrip('/')}/w2v_emb_{str(self.date_range)}.npy"
# 传入你持有的访问凭证(SAS令牌、存储账户密钥均可)
blob_client = BlobClient.from_blob_url(blob_url, credential="你的访问凭证")

# 读取到内存流
byte_stream = BytesIO(blob_client.download_blob().readall())
# 直接从内存流加载npy数组
dat = np.load(byte_stream)

注意事项

  • npy格式自带数组维度、数据类型等头信息,必须使用np.load读取,np.fromfile仅适用于读取无格式的纯二进制数据,强行使用会出现数据错乱
  • 访问私有存储资源时必须携带合法凭证,避免出现403/404访问错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:36:03