我怎样才能制作"tuple of an ndarray of ndarrays"?
How can I make a "tuple of an ndarray of ndarrays"?
如何创建包含两个 "numpy.ndarray" 的元组?如果这样做,我可以更新元组内的 ndarrays 吗?
我正在编写 python 实现某些神经网络的代码,以便使其能够处理我自己的输入数据。目标是读取图像文件和 return 基于神经网络输出的输出。我从 Michael Nielsen (link) 撰写的一本关于神经网络的优秀在线书籍中获取了代码。
原始代码从一个名为 MNIST 的著名数据集读取,存储为一个文件,该文件是 python 的 pickle 函数的输出。现在,数据集的输入数据由 data=Pickle.Load() 调用读取。
Pickle loads dataset's data
执行此行时,数据变量被加载为包含两个 "Numpy ndArrays of length 10000" 的 "Tuple of length 2",每个 ndarray 元素是另一个长度为 784 的 ndarray(实际上是 28x28 图像的值)。
现在,问题是我正在尝试覆盖输入,以便它不是从腌制文件中读取,而是从普通图像文件中读取。腌制文件最初包含 N 个图像文件。我正在尝试从我的单个图像文件中裁剪 N 个图像文件并重组我的数据,以便它与原始格式兼容。
我成功读取了我的图像文件,裁剪了图像的 window,创建了包含 784 个像素值(单个图像)的最里面的 ndarray。但是我如何创建一个包含我裁剪的每个新图像的 ndarray,然后将它们放入一个元组中?有没有办法在单个 numpy 命令中重组我的数据?
关于您想要什么,我做了很多猜测,但这里是创建数组元组的示例:
一个 'image',拼凑成 (784,) 形状:
In [1027]: img=np.ones((28,28),int)
In [1028]: imgr = img.ravel()
In [1029]: imgr.shape
Out[1029]: (784,)
'stack' 这张图片的一堆副本。 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 place'.
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]]))
如何创建包含两个 "numpy.ndarray" 的元组?如果这样做,我可以更新元组内的 ndarrays 吗?
我正在编写 python 实现某些神经网络的代码,以便使其能够处理我自己的输入数据。目标是读取图像文件和 return 基于神经网络输出的输出。我从 Michael Nielsen (link) 撰写的一本关于神经网络的优秀在线书籍中获取了代码。
原始代码从一个名为 MNIST 的著名数据集读取,存储为一个文件,该文件是 python 的 pickle 函数的输出。现在,数据集的输入数据由 data=Pickle.Load() 调用读取。 Pickle loads dataset's data 执行此行时,数据变量被加载为包含两个 "Numpy ndArrays of length 10000" 的 "Tuple of length 2",每个 ndarray 元素是另一个长度为 784 的 ndarray(实际上是 28x28 图像的值)。
现在,问题是我正在尝试覆盖输入,以便它不是从腌制文件中读取,而是从普通图像文件中读取。腌制文件最初包含 N 个图像文件。我正在尝试从我的单个图像文件中裁剪 N 个图像文件并重组我的数据,以便它与原始格式兼容。
我成功读取了我的图像文件,裁剪了图像的 window,创建了包含 784 个像素值(单个图像)的最里面的 ndarray。但是我如何创建一个包含我裁剪的每个新图像的 ndarray,然后将它们放入一个元组中?有没有办法在单个 numpy 命令中重组我的数据?
关于您想要什么,我做了很多猜测,但这里是创建数组元组的示例:
一个 'image',拼凑成 (784,) 形状:
In [1027]: img=np.ones((28,28),int)
In [1028]: imgr = img.ravel()
In [1029]: imgr.shape
Out[1029]: (784,)
'stack' 这张图片的一堆副本。 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 place'.
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]]))