Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以将Google存储Blob作为n-d阵列下载到VM中吗?_Python_Numpy_Google Cloud Storage_Google Compute Engine_Data Science - Fatal编程技术网

Python 我可以将Google存储Blob作为n-d阵列下载到VM中吗?

Python 我可以将Google存储Blob作为n-d阵列下载到VM中吗?,python,numpy,google-cloud-storage,google-compute-engine,data-science,Python,Numpy,Google Cloud Storage,Google Compute Engine,Data Science,我有一个谷歌云引擎虚拟机,我正试图从我的云存储中获取数据——它是一个blob的形式,并将其转换为一个np数组,其形状与存储时相同 目前我唯一能让它工作的方法是下载到文件中,然后加载到一个看起来次优的numpy数组中 我曾尝试直接下载字符串数组并转换为numpy数组,但维度没有得到维护(它们被展平) 我可以将所有文件移到虚拟机上,但如果可能的话,我宁愿读“动态”吗 当前代码: def __getitem__(self, index): index = int(self.indexes[in

我有一个谷歌云引擎虚拟机,我正试图从我的云存储中获取数据——它是一个blob的形式,并将其转换为一个np数组,其形状与存储时相同

目前我唯一能让它工作的方法是下载到文件中,然后加载到一个看起来次优的numpy数组中

我曾尝试直接下载字符串数组并转换为numpy数组,但维度没有得到维护(它们被展平)

我可以将所有文件移到虚拟机上,但如果可能的话,我宁愿读“动态”吗

当前代码:

def __getitem__(self, index):
    index = int(self.indexes[int(index)])
    blob = bucket.blob(self.data_path + 'case_'+str(index)+'_volume.npy') 
    blob.download_to_filename('im.npy')
    image = np.load('im.npy')
    return image

如果您有足够的RAM将整个文件存储在内存中(同时也将其加载到numpy中),则可以将其读入
字节IO
对象,查找回缓冲区的开头,然后将其交给
numpy.load()
。根据您的特定功能进行必要的调整:

import io
import numpy as np
from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket('my-bucket')

blob = bucket.blob('my-file.npy')

with io.BytesIO() as in_memory_file:
  blob.download_to_file(in_memory_file)
  in_memory_file.seek(0)
  image = np.load(in_memory_file)

# then, for example:
print(image)
至少在没有自己编写必要的客户机库的情况下,似乎没有一种方法能够真正将GCS的读取数据流化