Dirichlet 분포에서 벡터를 추출한 랜덤 행렬 A를 만들고 싶습니다. 이 함수는 numpy에서 잘 작동합니다 .
import numpy as np
A = np.random.dirichlet(np.ones(n), n)
큐피 랑 똑같이 할 때
import cupy as cp
A = cp.random.dirichlet(cp.ones(n), n)
아래 오류가 발생합니다.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-45a4f64a8b6e> in <module>
6 n = 10000 #Size of the square matrix
7
----> 8 A = cp.random.dirichlet(cp.ones(n), n)
9
10 print("--- %s seconds ---" % (time.time() - start_time))
~\anaconda3\envs\tensorflow\lib\site-packages\cupy\random\_distributions.py in dirichlet(alpha, size, dtype)
112 """
113 rs = _generator.get_random_state()
--> 114 return rs.dirichlet(alpha, size, dtype)
115
116
~\anaconda3\envs\tensorflow\lib\site-packages\cupy\random\_generator.py in dirichlet(self, alpha, size, dtype)
144 size = alpha.shape
145 else:
--> 146 size += alpha.shape
147 y = cupy.empty(shape=size, dtype=dtype)
148 _kernels.standard_gamma_kernel(alpha, self._rk_seed, y)
TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'
입력이 이와 같은 numpy 배열 일 때
import cupy as cp
import numpy as np
A = cp.random.dirichlet(np.ones(n), n)
그런 다음 동일한 오류가 발생합니다.
alpha.shape
I 수동으로 검사 할 때 라인 146은 (N)이다. 큐피 버그입니까, 아니면 뭔가 빠졌습니까?
CUDA 10.1에 cupy-cuda101 버전 8.5.0을 사용하고 있습니다. cupy 및 tensorflow와 관련된 다른 모든 것은 내 GPU (2080ti)에서 완벽하게 작동합니다.
이것은 GitHub에보고해야하는 cupy의 버그입니다.
문서에도 불구하고 정수 인수의 대소 문자를 제대로 처리하지 못합니다. 튜플 또는 None
. 이것이 당신이보고있는 행동을 보는 이유입니다. (튜플을 제공했다면 (a, b)
결과 모양은 (a, b, n)
.
여기서 해결 방법은 원하는 모양을 길이 1 튜플로 제공하는 것 (n,)
입니다.. 쉼표가 필요합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다