Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays Pytables值错误(附加对象的秩与“array”不同)_Arrays_Python 3.x_Numpy_Pytables - Fatal编程技术网

Arrays Pytables值错误(附加对象的秩与“array”不同)

Arrays Pytables值错误(附加对象的秩与“array”不同),arrays,python-3.x,numpy,pytables,Arrays,Python 3.x,Numpy,Pytables,我正在尝试使用pytables存储我的图像数据集。我使用耳环在读取图像时附加每个图像。我的耳环和图像的尺寸是相同的(除了第一个,沿着它进行附加)。我正在使用以下代码: atom = Atom.from_dtype(np.dtype(np.uint32,(278,278,1))) i=0 for <read each image from folder using os into img>: im = cv2.imread(img.path,0) im = np.exp

我正在尝试使用pytables存储我的图像数据集。我使用耳环在读取图像时附加每个图像。我的耳环和图像的尺寸是相同的(除了第一个,沿着它进行附加)。我正在使用以下代码:

atom = Atom.from_dtype(np.dtype(np.uint32,(278,278,1)))
i=0
for <read each image from folder using os into img>:
    im = cv2.imread(img.path,0)
    im = np.expand_dims(im,2) #this is because keras needs 3d images and grayscale images are 2d
    if not i:
        X = data.create_earray(dataGroup,"X",atom,(0,)+im.shape,chunkshape=(20,20,20,1))
   X.append(np.expand_dims(im,0)) #as appending require same dim.
   i=1
atom=atom.from_dtype(np.dtype(np.uint32,(278278,1)))
i=0
用于:
im=cv2.imread(img.path,0)
im=np。展开_dims(im,2)#这是因为keras需要3d图像,而灰度图像是2d
如果不是,我:
X=数据。创建数组(数据组,“X”,原子,(0,)+im.shape,chunkshape=(20,20,20,1))
X.append(np.expand_dims(im,0))#因为追加需要相同的dim。
i=1

但当我运行代码时,它仍然给出了我的value错误,表示我的对象秩为1,X秩为4。当我使用im分配X尺寸时,这是怎么可能的。我甚至试着打印im的形状,它给出(278278,1)。那么,问题是什么?我是第一次使用Pytables,所以不太了解它们。

首先,请注意,在加载第一个图像数据集之前,不必创建耳环。Pytables足够智能,可以从第一个对象确定原子和形状定义。
如果没有完整的示例和数据,我很难使用您的代码。因此,我创建了一个非常简单的示例,它使用
np.arange()
创建了两个
(278278)
图像数组,然后在2和0方向上扩展它们。希望这能模拟您试图加载到Array的数据。2个Pytables函数(
file.create_array
array.append
)创建2行数据,每个“图像”1行。运行后,用HDFView打开
image_data1.h5
,检查数据。
也许这将帮助您了解如何将图像加载到HDF5耳环:

import tables as tb, numpy as np
data = tb.open_file("image_data1.h5", mode='w')
dataGroup = data.create_group(data.root, 'MyData')

im = np.arange(278*278).reshape((278,278))
im = np.expand_dims(im,2)
im = np.expand_dims(im,0)

X = data.create_earray( dataGroup,"X",obj=im )

print ('dim=', X.ndim, ', rows = ', X.nrows)

im = np.arange(278*278, 278*278+278*278).reshape((278,278))
im = np.expand_dims(im,2)
im = np.expand_dims(im,0)

X.append( im )

print ('dim=', X.ndim, ', rows = ', X.nrows)

data.close()

首先,请注意,在加载第一个图像数据集之前,不必创建耳环。Pytables足够智能,可以从第一个对象确定原子和形状定义。
如果没有完整的示例和数据,我很难使用您的代码。因此,我创建了一个非常简单的示例,它使用
np.arange()
创建了两个
(278278)
图像数组,然后在2和0方向上扩展它们。希望这能模拟您试图加载到Array的数据。2个Pytables函数(
file.create_array
array.append
)创建2行数据,每个“图像”1行。运行后,用HDFView打开
image_data1.h5
,检查数据。
也许这将帮助您了解如何将图像加载到HDF5耳环:

import tables as tb, numpy as np
data = tb.open_file("image_data1.h5", mode='w')
dataGroup = data.create_group(data.root, 'MyData')

im = np.arange(278*278).reshape((278,278))
im = np.expand_dims(im,2)
im = np.expand_dims(im,0)

X = data.create_earray( dataGroup,"X",obj=im )

print ('dim=', X.ndim, ', rows = ', X.nrows)

im = np.arange(278*278, 278*278+278*278).reshape((278,278))
im = np.expand_dims(im,2)
im = np.expand_dims(im,0)

X.append( im )

print ('dim=', X.ndim, ', rows = ', X.nrows)

data.close()

使用更复杂的写入方法添加第二个答案,再加上
array.read
示例。坦白地说,我更喜欢我的简单方法(如上所述)创建定义了
obj=
的array,并让Pytables处理数据结构。但是,如果您更愿意自己管理,请参见下面的示例2。需要注意的关键事项:

  • 原子定义有4个维度,0轴设置为零(定义
    将延伸的方向)
  • im=np.expand_dims(im,0)
    完成,直到在 创建时耳环形状的定义
[更新代码如下]

import tables as tb, numpy as np
data = tb.open_file("image_data1.h5", mode='w')
dataGroup = data.create_group(data.root, 'MyData')
MyAtom = tb.Atom.from_dtype(np.dtype(np.uint32,(0,278,278,1)))

im = np.arange(278*278).reshape((278,278))
im = np.expand_dims(im,2)

X = data.create_earray(dataGroup,"X", MyAtom, (0,)+im.shape)

im = np.expand_dims(im,0)
X.append( im )

print ('flavor =', X.flavor )
print ('dim=', X.ndim, ', rows = ', X.nrows)

im = np.arange(278*278,278*278+278*278).reshape((278,278))
im = np.expand_dims(im,2)
im = np.expand_dims(im,0)

X.append( im )

print ('dim=', X.ndim, ', rows = ', X.nrows)

data.close()
以下是从Array X读取数据所需的行(使用两条
print
语句验证角落中的值)。只要耳环的味道是Numpy(在我的示例中就是这样),这就应该有效。您还可以使用
out=
参数指定一个NumPy数组来接收输出数据。还有其他方法可以访问array数据,包括
.iterrows()
进行迭代,以及
\uuuu getitem\uuuuuu()
使用奇特的索引进行切片。如果要执行这些操作,请阅读Pytables文档

Y_1 = X.read( 0 )
print (Y_1[0,0,0])
print (Y_1[-1,-1,-1])

Y_2 = X.read( 1 )
print (Y_2[0,0,0])
print (Y_2[-1,-1,-1])

使用更复杂的写入方法添加第二个答案,再加上
array.read
示例。坦白地说,我更喜欢我的简单方法(如上所述)创建定义了
obj=
的array,并让Pytables处理数据结构。但是,如果您更愿意自己管理,请参见下面的示例2。需要注意的关键事项:

  • 原子定义有4个维度,0轴设置为零(定义
    将延伸的方向)
  • im=np.expand_dims(im,0)
    完成,直到在 创建时耳环形状的定义
[更新代码如下]

import tables as tb, numpy as np
data = tb.open_file("image_data1.h5", mode='w')
dataGroup = data.create_group(data.root, 'MyData')
MyAtom = tb.Atom.from_dtype(np.dtype(np.uint32,(0,278,278,1)))

im = np.arange(278*278).reshape((278,278))
im = np.expand_dims(im,2)

X = data.create_earray(dataGroup,"X", MyAtom, (0,)+im.shape)

im = np.expand_dims(im,0)
X.append( im )

print ('flavor =', X.flavor )
print ('dim=', X.ndim, ', rows = ', X.nrows)

im = np.arange(278*278,278*278+278*278).reshape((278,278))
im = np.expand_dims(im,2)
im = np.expand_dims(im,0)

X.append( im )

print ('dim=', X.ndim, ', rows = ', X.nrows)

data.close()
以下是从Array X读取数据所需的行(使用两条
print
语句验证角落中的值)。只要耳环的味道是Numpy(在我的示例中就是这样),这就应该有效。您还可以使用
out=
参数指定一个NumPy数组来接收输出数据。还有其他方法可以访问array数据,包括
.iterrows()
进行迭代,以及
\uuuu getitem\uuuuuu()
使用奇特的索引进行切片。如果要执行这些操作,请阅读Pytables文档

Y_1 = X.read( 0 )
print (Y_1[0,0,0])
print (Y_1[-1,-1,-1])

Y_2 = X.read( 1 )
print (Y_2[0,0,0])
print (Y_2[-1,-1,-1])

这是可行的,但我的代码没有什么问题。你能告诉我如何从耳环上取回numpy阵列吗。当我读取该文件时,它返回一个array对象,该对象在传递到matplotlib时为图像错误提供了无效的维度。@Shantanu Shinde,您的代码中有很多东西。当做复杂的事情时,从简单开始,增加复杂性。您的
数据.create_array()
调用定义了原子、形状和块大小。然后附加图像数据。当你这样做的时候,所有这些都必须是一致的。而且,在创建耳环时,需要将Atom实例的一个维度设置为零。(来自pytables的错误消息!)。有关编码的详细信息,请参见下面的第二个答案,以及
array.read()
示例。这很管用,但没有发现我的代码有什么问题。你能告诉我如何从耳环上取回numpy阵列吗。当我读文件时,它是r