Python 如何映射numpy数据集?
我正在使用和提供的MNIST数据集。我相信数据集是一个numpy数组。我对其进行了如下改造:Python 如何映射numpy数据集?,python,numpy,Python,Numpy,我正在使用和提供的MNIST数据集。我相信数据集是一个numpy数组。我对其进行了如下改造: X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) 这给出了一个(60000,1,28,28)numpy数组。这可以理解为有60000个28 x 28图像。我想提取每个28 x 28图像,并对其应用某种函数f。我尝试了以下方法: f = la
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)
这给出了一个(60000,1,28,28)
numpy数组。这可以理解为有60000个28 x 28图像。我想提取每个28 x 28图像,并对其应用某种函数f
。我尝试了以下方法:
f = lambda a, _: print a.shape
np.apply_over_axes(f, data, [2,3])
但是我不确定第二个轴参数究竟起作用了
我也尝试过:
f = lambda a: print a.shape
np.apply_along_axis(f, 0, data)
但是形状总是(60000,)
,而不是我所期望的(1,28,28)
。如何获取每个子图像?这个lambda
没有意义:
lambda a, _: print a.shape
相当于
def foo(a, x):
return print a.shape
print a.shape
打印某些内容,但不返回任何内容,甚至可能是错误
lambda a,x:a.shape
更好,返回a
的形状,忽略x
参数
如果尺寸1
维度有问题,为什么不直接忽略它呢
X_train = X_train.reshape(X_train.shape[0], 28, 28)
或者移除它
X_train[:,0,...]
np.squeeze(X_train)
但申请的目的是什么?只是为了找到一组子矩阵的形状
In [304]: X = np.ones((6,1,2,3))
In [305]: [x.shape for x in X]
Out[305]: [(1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)]
或
要删除第二个维度,请仅获取最后2个维度的形状
该沿_轴应用_
,在最后3维上迭代,将1d数组传递给lambda。因此实际上它返回的是X[:,0,i,j].shape
In [308]: np.apply_along_axis(lambda a: a.shape, 0, X)
Out[308]:
array([[[[6, 6, 6],
[6, 6, 6]]]])
通常不需要这样的迭代。当使用时,与“全阵列”相比速度较慢。这lambda
没有意义:
lambda a, _: print a.shape
相当于
def foo(a, x):
return print a.shape
print a.shape
打印某些内容,但不返回任何内容,甚至可能是错误
lambda a,x:a.shape
更好,返回a
的形状,忽略x
参数
如果尺寸1
维度有问题,为什么不直接忽略它呢
X_train = X_train.reshape(X_train.shape[0], 28, 28)
或者移除它
X_train[:,0,...]
np.squeeze(X_train)
但申请的目的是什么?只是为了找到一组子矩阵的形状
In [304]: X = np.ones((6,1,2,3))
In [305]: [x.shape for x in X]
Out[305]: [(1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)]
或
要删除第二个维度,请仅获取最后2个维度的形状
该沿_轴应用_
,在最后3维上迭代,将1d数组传递给lambda。因此实际上它返回的是X[:,0,i,j].shape
In [308]: np.apply_along_axis(lambda a: a.shape, 0, X)
Out[308]:
array([[[[6, 6, 6],
[6, 6, 6]]]])
通常不需要这样的迭代。与“全数组”相比,使用时速度较慢。使用np无法获得性能。沿轴应用,np。矢量化,等等。只需使用循环:
import numpy as np
s = (4,1,28,28)
a = np.zeros(s)
for img in a[:,0]:
print(img.shape)
# (28, 28)
# (28, 28)
# (28, 28)
# (28, 28)
使用np.沿_轴应用_
,np.矢量化
,等等,不会获得任何性能。只需使用一个循环:
import numpy as np
s = (4,1,28,28)
a = np.zeros(s)
for img in a[:,0]:
print(img.shape)
# (28, 28)
# (28, 28)
# (28, 28)
# (28, 28)
return print expr
返回None
。我只想测试维度,所以lambda
基本上是无用的。至于1
维度,我遵循的教程说,这是神经网络所需要的:\uu
按照惯例是用来忽略变量的。我试图给出一个可验证的最小示例。就目前情况而言,apply_over call只是为了证明我的问题。最后,我想对60000个图像中的每一个应用一个函数。但目前,f
不打印(1,28,28)
矩阵,而是打印(60000,)
矩阵。但是我想对每个(1,28,28)
矩阵应用一个函数。然后在第一维上循环:[f(x)for x in x]
。但是在应用
中,通过[2,3]`大小写传递给函数的两个变量是什么?我以为它们是轴,所以我会传递[2,3]
来获得28 x 28图像,但似乎我对numpy数组的工作原理有很大的误解…returnprint expr
returnsNone
。我只想测试维度,所以lambda
基本上是无用的。至于1
维度,我遵循的教程说,这是神经网络所需要的:\uu
按照惯例是用来忽略变量的。我试图给出一个可验证的最小示例。就目前情况而言,apply_over call只是为了证明我的问题。最后,我想对60000个图像中的每一个应用一个函数。但目前,f
不打印(1,28,28)
矩阵,而是打印(60000,)
矩阵。但是我想对每个(1,28,28)
矩阵应用一个函数。然后在第一维上循环:[f(x)for x in x]
。但是在应用
中,通过[2,3]`大小写传递给函数的两个变量是什么?我以为它们是轴,所以我会传递[2,3]
来获得28 x 28图像,但我似乎对numpy阵列的工作原理有很大的误解…啊,好的。这个符号更有意义!谢谢啊,好的。这个符号更有意义!谢谢