我如何制作ndarray ndarray"?的元组?

时间:2015-12-17 09:11:24

标签: python numpy neural-network pickle

如何创建一个包含两个" numpy.ndarray" s的元组?如果我这样做,我可以更新元组内的ndarrays吗?

我正在研究一个实现某些神经网络的python代码,以使其能够使用我自己的输入数据。目标是读取图像文件并根据神经网络输出返回输出。我从Michael Nielsen(link)撰写的一本关于神经网络的优秀在线书籍中获取了代码。

原始代码从一个名为MNIST的着名数据集中读取,存储为一个文件,输出python的pickle函数。现在,来自数据集的输入数据由data = Pickle.Load()调用读取。 Pickle loads dataset's data 执行此行时,数据变量将作为"长度为2"的元组加载。包含两个"长度为10000"的Numpy ndArrays,每个ndarray元素是另一个长度为784的ndarray(实际上是28x28图像的值)。

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

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

1 个答案:

答案 0 :(得分:0)

我正在猜测你想要什么,但这里是创建数组元组的示例:

'图像',瞄准(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]]))