繁体   English   中英

如何制作“ ndarrays的ndarray的元组”?

[英]How can I make a “tuple of an ndarray of ndarrays”?

如何创建包含两个“ numpy.ndarray”的元组? 如果这样做,我可以在元组中更新ndarray吗?

我使用实现某些神经网络的python代码进行工作,以使其与我自己的输入数据一起使用。 目的是读取图像文件并根据神经网络的输出返回输出。 我从迈克尔·尼尔森(Michael Nielsen)撰写的关于神经网络的出色在线书中摘录了代码( 链接 )。

原始代码从称为MNIST的著名数据集中读取,并存储为文件,该文件是python的pickle函数的输出。 现在,通过data = Pickle.Load()调用读取数据集中的输入数据。 Pickle加载数据集的数据在执行此行时,数据变量将作为“长度为2的元组”加载,其中包含两个“长度为10000的Numpy ndArrays”,每个ndarray元素都是另一个长度为784的ndarray(实际上是a的值28x28图片)。

现在,问题是我试图覆盖输入,以便从正常图像文件读取而不是从腌制文件中读取。 腌制的文件最初包含N个图像文件。 我正在尝试从单个图像文件中裁剪N个图像文件并重组数据,以使其与原始格式兼容。

我成功读取了图像文件,裁剪了图像窗口,创建了最里面的ndarray,其中包含784个像素值(单个图像)。 但是,如何创建一个包含每个新图像的ndarray,然后将它们放入一个元组中? 有没有办法在单个numpy命令中重组我的数据?

我对您想要的内容进行了很多猜测,但是以下示例创建了一个数组元组:

惊吓到(784)形状的“图像”:

In [1027]: img=np.ones((28,28),int)
In [1028]: imgr = img.ravel()
In [1029]: imgr.shape
Out[1029]: (784,)

“堆叠”该图像的一堆副本。 np.concatenate对于连接数组也很方便,但是np.array自动将它们连接到新轴上。

In [1030]: imgs=np.array([imgr.copy(),imgr.copy()*2,imgr.copy()*3])
In [1031]: imgs
Out[1031]: 
array([[1, 1, 1, ..., 1, 1, 1],
       [2, 2, 2, ..., 2, 2, 2],
       [3, 3, 3, ..., 3, 3, 3]])
In [1032]: imgs.shape
Out[1032]: (3, 784)

创建元组很简单(基本的Python),只是(x, y)语法。

In [1033]: tup=(imgs, imgs.copy())
In [1034]: tup
Out[1034]: 
(array([[1, 1, 1, ..., 1, 1, 1],
        [2, 2, 2, ..., 2, 2, 2],
        [3, 3, 3, ..., 3, 3, 3]]), array([[1, 1, 1, ..., 1, 1, 1],
        [2, 2, 2, ..., 2, 2, 2],
        [3, 3, 3, ..., 3, 3, 3]]))

严格来说,元组是不可变的。 您不能像列表那样替换元素。 但是由于元素是数组,因此可以“就地”更改它们。

In [1035]: tup[0][:]*=2
In [1036]: tup
Out[1036]: 
(array([[2, 2, 2, ..., 2, 2, 2],
        [4, 4, 4, ..., 4, 4, 4],
        [6, 6, 6, ..., 6, 6, 6]]), array([[1, 1, 1, ..., 1, 1, 1],
        [2, 2, 2, ..., 2, 2, 2],
        [3, 3, 3, ..., 3, 3, 3]]))

所以在这里我将第一个数组按比例缩放了2

缩放第一个数组的图像之一,我可以使用:

In [1038]: tup[0][1,:] += 5
In [1039]: tup
Out[1039]: 
(array([[2, 2, 2, ..., 2, 2, 2],
        [9, 9, 9, ..., 9, 9, 9],
        [6, 6, 6, ..., 6, 6, 6]]), array([[1, 1, 1, ..., 1, 1, 1],
        [2, 2, 2, ..., 2, 2, 2],
        [3, 3, 3, ..., 3, 3, 3]]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM