2016-06-16 2 views
0

데이터 집합에 0을 포함해야하는 0-1 범위의 희소 3 차원 비모수 데이터 집합을 생성하려고합니다. 나는 이것을 사용하여 생성하려고했다 :0-1 범위의 임의의 희소 데이터 생성

training_matrix = numpy.random.rand(3000, 3) 

그러나 어떤 행에서도 데이터를 0.00000으로 출력하지 않는다.

+0

어떤 모양이 배열이어야합니까? – Tonechas

+0

배열은 3000 행이어야하며 일부 행은 3 행이어야합니다. 0.00000 0.00000 0.00000 0 – Angela

+0

3000 행 3 열은 3D 배열이 아닌 2D 배열에 해당합니다. – Tonechas

답변

2

우리는 3 열로 nrows 행 제로의 배열을 생성하여 시작합니다

import numpy as np 
nrows = 3000 # total number of rows 
training_matrix = np.zeros((nrows, 3)) 

그런 다음 우리는 무작위로 range(nrows)에서 (교체하지 않고) nz 정수를 그립니다. 이 숫자는 0이 아닌 데이터가있는 행의 색인입니다. training_matrix의 희박 성은 nz에 의해 결정됩니다.

nz = 1500 # number of rows with nonzero data 
indices = np.random.choice(nrows, nz, replace=False) 

을 그리고 마지막으로, 우리는 advanced indexing을 통해 임의의 숫자와 선택된 행을 채울 : 당신은 (50 %로 설정이 예제 희소성에) 당신의 요구에 맞게 값을 조정할 수 있습니다

training_matrix[indices, :] = np.random.rand(nz, 3) 

이를 위의 코드를 실행하면 얻을 수있는 것입니다 :

>>> print(training_matrix) 
[[ 0.96088615 0.81550102 0.21647398] 
[ 0.   0.   0.  ] 
[ 0.55381338 0.66734065 0.66437689] 
..., 
[ 0.   0.   0.  ] 
[ 0.03182902 0.85349965 0.54315029] 
[ 0.71628805 0.2242126 0.02481218]] 
+0

감사합니다. 필요에 따라 작동했습니다. – Angela

2

5 개의 숫자가 모두 0이되기를 원하기 때문에 발생 확률은 1/10^5 = 0.00001이며 대체 할 수 있습니다. 3000 * 3 = 9000 값이 있더라도 그 값을 얻는 확률은 여전히 ​​무시할 수 있습니다. 마음의 평화를 위해 시도 할 수있는 다른 방법은 임의의 숫자를 생성하고 원하는 경우 소수점 이하 자릿수를 잘라내는 것입니다.

관련 문제