在python中,如何使用np数组高效地处理多维数据?
我在数据集中有数万张32 X 32 RGB图像。例如 X_系列,形状(123123,32,32,3) 我想灰显rgb,并将形状更改为(123123,32,32,1) 我这里有代码,这是非常不够的,我想知道什么是最好的方式来做这件事。我在AWS G2或P2主机上,所以我有GPU 谢谢在python中,如何使用np数组高效地处理多维数据?,python,numpy,Python,Numpy,我在数据集中有数万张32 X 32 RGB图像。例如 X_系列,形状(123123,32,32,3) 我想灰显rgb,并将形状更改为(123123,32,32,1) 我这里有代码,这是非常不够的,我想知道什么是最好的方式来做这件事。我在AWS G2或P2主机上,所以我有GPU 谢谢 def grayedOut(x) : out = [] for n in range(len(x)) : nv = [] for i in range(len(x[n
def grayedOut(x) :
out = []
for n in range(len(x)) :
nv = []
for i in range(len(x[n])) :
iv = []
for j in range(len(x[n,i])) :
r,g,b = x[n,i,j,0], x[n,i,j,1], x[n, i,j,2]
gray = np.uint8(0.2989 * r + 0.5870 * g + 0.1140 * b)
iv.append(np.asarray([gray]))
nv.append(iv)
out.append(nv)
return np.asarray(out)
假设
images
是所有RGB图像的数组。然后,以下代码生成灰度图像数组:
coeffs = np.array([0.2989, 0.5870, 0.1140])
gray = np.apply_along_axis(coeffs.dot, 3, images).astype(np.uint8)
我希望此代码比您的三重循环快。假设
图像
是您的所有RGB图像数组。然后,以下代码生成灰度图像数组:
coeffs = np.array([0.2989, 0.5870, 0.1140])
gray = np.apply_along_axis(coeffs.dot, 3, images).astype(np.uint8)
我希望此代码比您的三重循环快。您只需编写
def grayedOut(x):
return x.dot([0.2989, 0.5870, 0.1140])[..., np.newaxis].astype(np.uint8)
:计算每个像素的灰度分量。生成的形状将是x.dot([0.2989,0.5870,0.1140])
(123123,32,32)
:为结果创建一个新轴,给出所需的形状[…,np.newaxis]
(123123,32,32,1)
:将数据类型转换为uint8.astype(np.uint8)
- 你可以简单地写
def grayedOut(x):
return x.dot([0.2989, 0.5870, 0.1140])[..., np.newaxis].astype(np.uint8)
:计算每个像素的灰度分量。生成的形状将是x.dot([0.2989,0.5870,0.1140])
(123123,32,32)
:为结果创建一个新轴,给出所需的形状[…,np.newaxis]
(123123,32,32,1)
:将数据类型转换为uint8.astype(np.uint8)