为什么scipys stats.bernoulli.rvs产生一个dtype为int32的数组?

时间:2017-11-17 08:29:36

标签: python numpy scipy

我想知道为什么static Scanner keyboard = new Scanner(System.in); public static void main(String[] args) { System.out.println("Enter 8 letters: "); String letters = keyboard.nextLine().replaceAll(" ", ""); char cArray[] = letters.toCharArray(); System.out.println("Enter any letter to check about it: "); char letter = keyboard.next().charAt(0); boolean found = false; for (int i = 0; i < cArray.length; i++) { if (cArray[i] == letter) { System.out.println("We found " + letter + " at position " + i); found = true; break; //used as you specify only to find the first one } } if (!found) { System.out.println("Are you sure about the letter you entered? We didn't find it"); } } 随机变量类scipy产生带有dtype stats.bernoulli的ndarrays作为样本:

int32

对二进制结果使用32位整数值似乎效率极低。我原本期望得到 > stats.bernoulli.rvs(0.3, size=10) array([0, 1, 0, 1, 0, 1, 0, 0, 0, 1] > stats.bernoulli.rvs(0.3, size=10).dtype dtype('int32') np.bool的dtype。

是否有人知道决定将np.int8数组生成为样本的原因?

备注:我正在使用大(10 ^ 8)个样本。奇怪的是,转换为int32并没有给我带来任何更好的性能,无论是创建数组还是计算数组上的函数。也许是因为我的CPU只能处理32位/ 64位块......

1 个答案:

答案 0 :(得分:1)

在我的系统上它是int64,所以是的,它只是一个默认的整数大小。为什么不说bool。在源代码中,它使用scipy.hypergeom返回整数。 我能想到的唯一方法是使用dtype=np.bool预先初始化输出数组,如果可以的话。然后,虽然你仍会在stats.bernoulli.rvs的生成上浪费一些记忆,但你可以立即清理它。