2017-05-05 65 views
0

我读一个纸和它们提及作为如何以50%的概率沿x轴翻转3D数据?

与沿x轴50%的机会翻转数据。

鉴于输入数据是40x40x24。我如何执行上述要求?我使用Python 2.7版试图波纹管代码,但我不知道关于“50%的机会”,这意味着

data_flip = np.flipud(data) 
data_flip = data[:, ::-1, :] 

回答

1

首先,为了选择出的概率n元素p,你可以简单地使用的:np.random.rand(n) < pr = np.random.rand()[0, 1)生成一个统一分布的数字,因此r小于某个常量p(其中p在[0,1]中)的概率恰好为p。该概率实际上是CDF of the distribution,在这种情况下,其中a = 0和b = 1:

F(p) = 0, p<0 
     p, 0<=p<=1 
     1, p>1 

其次,沿x轴用np.fliplr而非np.flipud(其沿y轴翻转翻转数据):

# generate a 3D array size 3x3x5 
A = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
A = np.tile(np.expand_dims(A, axis=2), (1,1,5)) 
# index the 3rd axis with probability 0.5 
p = 0.5 
idxs = np.random.rand(A.shape[2]) < p 
# flip left-right the chosen arrays in the 3rd dimension 
A[:,:,idxs] = np.fliplr(A[:,:,idxs]) 
+0

感谢您的回答。你能检查最后一行'AA [:,:,idxs] = np.fliplr(AA [:,:,idxs])''。是A,而不是AA?另外,你能解释一下'50%几率'的含义吗? – user8264

+0

'AA'应该是'A' - 谢谢,修正了这个问题。我也阐述了50%的机会。附加代码中的前3行只是为了生成一些数据来处理(您已经拥有)。 – user2999345

+0

啊我明白了,对不起。这个想法是随机选择一个概率为0.5的切片并将其翻转。非常感谢 – user8264