1

如何使用slice对象来访问tables.CArray? 我目前拥有的是

In:  coord_slice
Out: [slice(0, 31, None), slice(0, 5760, None), slice(0, 2880, None)]

In:  _ds
Out:  /data/mydata (CArray(31, 5760, 2880), shuffle, blosc(5)) ''
      atom := Float32Atom(shape=(), dflt=0.0)
      maindim := 0
      flavor  := 'numpy'
      byteorder := 'little'
      chunkshape := (1, 45, 2880)

In: _ds[coord_slice]
Out: *** TypeError: long() argument must be a string or a number, not 'slice'
4

1 回答 1

1

以下是tables.CArray. 如果coord_slice是 atuple而不是 a list,您的代码应该可以工作。 这是 Github 上的一个已关闭问题,其中提供了一些关于为什么列表和元组不能互换使用的线索

import tables
import numpy

fileName = 'carray1.h5'
shape = (200, 300)
atom = tables.UInt8Atom()
filters = tables.Filters(complevel=5, complib='zlib')

h5f = tables.openFile(fileName, 'w')
ca = h5f.createCArray(h5f.root, 'carray', atom, shape, filters=filters)

coord_slice = [slice(10,60,None),slice(20,70,None)]

# attempt to do multi-dimensional indexing with coord_slice as a list
try:
    ca[coord_slice] = numpy.ones((50, 50))
except TypeError:
    print 'TypeError was thrown with list'

# convert coord_slice to a tuple and try again.  This should work.
coord_slice = tuple(coord_slice)
try:
    ca[coord_slice] = numpy.ones((50, 50))
except TypeError:
    print 'TypeError was thrown with tuple'


print ca[coord_slice]
h5f.close()
于 2013-01-22T14:55:06.300 回答