所以我有一个形状为 (28, 28, 60000)
的 3D 数组,对应于 60000 张 28x28 图像。我想通过使用以下函数获取每个图像的随机 24x24 block :
def crop(X):
x = random.randint(0,3)
y = random.randint(0,3)
return X[x:24+x, y:24+y,]
但是,如果我将函数 crop(X)
应用于我的矩阵 X
,则会返回每个样本的相同 block 。如何确保每个样本使用不同的随机生成的 x
和 y
值?
最佳答案
这是我的尝试。
基本上这个想法是你将不得不以某种方式将矩阵从最后一个维度分开(numpy 不允许你应用不是一维数组的东西)。您可以使用 dsplit
执行此操作,然后使用 dstack
将其重新组合在一起。
然后您将在每个组件上应用裁剪功能。作为一个简化的例子:
import random
a = np.array(range(300)).reshape(10,10,3)
def crop(X):
x = random.randint(0,3)
y = random.randint(0,3)
return X[x:3+x, y:3+y]
# we can loop over each component of the matrix by first splitting it
# off the last dimension:
b = [np.squeeze(x) for x in np.dsplit(a, a.shape[-1])]
# this will recreate the original matrix
c = np.dstack(b)
# so putting it together with the crop function
get_rand_matrix = [crop(np.squeeze(x)) for x in np.dsplit(a, a.shape[-1])]
desired_result = np.dstack(get_rand_matrix)
关于python - 如何将包含随机数的函数应用于 python 中的 numpy 数组的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930755/