小编Jam*_*esS的帖子

最合适的数据结构(Python)

我是Python新手,对于在我的代码中存储数据的"最佳"方式可能是一个非常基本的问题.任何建议非常感谢!

我有一个很长的.csv文件,格式如下:

Scenario,Year,Month,Value
1,1961,1,0.5
1,1961,2,0.7
1,1961,3,0.2
etc.
Run Code Online (Sandbox Code Playgroud)

我的场景值从1到100,年份从1961年到1990年,月份从1到12.因此,我的文件有100*29*12 = 34800行,每行都有一个关联值.

我想把这个文件读成某种Python数据结构,这样我就可以通过指定'Scenario','Year'和'Month'来访问'Value'.请问最好的方法是什么(或者有哪些选择)?

在我的脑海中,我认为这些数据是一种带有轴,用于场景,年和月的"数字长方体",因此每个值都位于坐标(场景,年,月).出于这个原因,我很想尝试将这些值读入3D numpy数组,并使用Scenario,Year和Month作为索引.这是明智的做法吗?

我想我也可以创建一个字典,其中键是类似的

str(Scenario)+str(Year)+str(Month)
Run Code Online (Sandbox Code Playgroud)

这会更好吗?还有其他选择吗?

(通过'更好',我想我的意思是'访问速度更快',尽管如果一种方法比另一种方法的内存密集程度要低得多,那么也很了解它.

非常感谢!

python arrays dictionary data-structures

9
推荐指数
1
解决办法
539
查看次数

用于LZF压缩阵列的HDF5查看器

我正在使用带有LZF压缩的h5py来将NumPy阵列存储在HDF5文件中.

它运行良好,我的压缩文件比未压缩文件更便携.但是,如果我尝试使用像vitablesHDFView这样的应用程序查看压缩文件,我会收到以下错误:

" 错误:读取记录时出现问题.数据集似乎是使用None库进行压缩.请检查它是否已安装在您的系统中,请 "在vitables

" ncsa.hdf.hdf5lib.exceptions.HDF5Exception:ncsa.hdf.hdf5lib.exceptions.HDF5LibraryException:无法HDFView中打开目录或文件 " .

我可以在两个应用程序中浏览文件结构OK,但打开数组会产生错误.如果我关闭压缩,问题就会消失.例如,在运行下面的代码后,打开array_1会给出错误,但array_2不会.

import numpy as np, h5py

h5_path = r'D:\test.h5'

f = h5py.File(h5_path, 'w')

# Create fake data
data = (np.random.random(1E6)*100).astype(int)

# Save with compression
dset1 = f.create_dataset(r'/path/to/arrays/array_1', data=data, 
                         compression='lzf')

# Save without compression
dset2 = f.create_dataset(r'/path/to/arrays/array_2', data=data)

# Set some object properties
dset1.attrs['Description'] = 'Compressed array.'
dset2.attrs['Description'] = 'Uncompressed array.'

f.close()
Run Code Online (Sandbox Code Playgroud)

这种行为是期待的,还是我做错了什么?

如果vitables和HDFView无法打开压缩数组,是否有另一种查看器可以?

非常感谢!

python hdf5 h5py

2
推荐指数
1
解决办法
1131
查看次数

标签 统计

python ×2

arrays ×1

data-structures ×1

dictionary ×1

h5py ×1

hdf5 ×1