다른 수준의 희소성이있는 행렬을 만들려고합니다. 데이터 행렬에서 0이 아닌 모든 값을 1로 변환하고 남은 항목을 0으로 변환하여이 작업을 수행하려고합니다.는 무작위로 파이썬을 사용하여 행렬에서 0이 아닌 값의 비율을 제어합니다.
다음 코드를 사용하여이를 수행 할 수있었습니다. 그러나 1의 백분율을 제어하여 최종 행렬에서 1을 무작위로 0으로 만들 수있는 방법을 확신하지 못합니다.
가numpy.random.choice가
numpy.random.randint가 (2, 크기 = data_shape, p = [0.75,0.25])
에이블 : 예를 들어
우리는 1의 백분율을 제어 할 수있는 행렬을 만듭니다. 최종 매트릭스에서 비슷한 방법으로 1의 비율을 제어하려면 어떻게합니까?
import numpy as np
import scipy.sparse as sp
import numpy.ma as ma
indptr = np.array([0, 2, 3, 6])
indices = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
matrix = sp.csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
print(matrix)
mask = ma.masked_greater(matrix, 0)
print(mask)
print(mask.mask)
matrix2 = mask.mask
int_matrix = matrix2.astype(int)
print(int_matrix)
출력 : 도움을
Data matrix:
[[1 0 2]
[0 0 3]
[4 5 6]]
Masked matrix:
[[-- 0 --]
[0 0 --]
[-- -- --]]
Masked values:
[[ True False True]
[False False True]
[ True True True]]
Final matrix
[[1 0 1]
[0 0 1]
[1 1 1]]
감사합니다!
올바르게 이해하면 25 % 1의 배열이 있다고합시다. 그런 다음 20 % 1s라고 말하도록 수정하고 이미 설정된 1s에서 0s 만 사용 하시겠습니까? – Divakar
@Divakar 네, 맞습니다. – Josephine