1

ベクトルがディリクレ分布から引き出されるランダム行列 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.shape146 行目から (n,) です。それはcupyバグですか、それとも何か不足していますか?

CUDA 10.1 用の cupy-cuda101 バージョン 8.5.0 を使用しています。cupy と tensorflow に関係する他のすべては、私の GPU (2080ti) で完全に動作します。

4

1 に答える 1