python 矢量化 numpy 选择

kkih6yb8  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(192)

假设我有二维numpy数组ABP,它们都有相同的形状。AB表示两个选择,P包含区间[0,现在我想创建一个新的数组C,其中C[i,j]A[i,j]P[i,j]的概率给出,由B[i,j]1-P[i,j]的概率给出。
这里,在A填充零、B填充一和随机概率P的示例代码中:

import numpy as np
rows = 4
columns = 5
A = np.zeros((rows, columns)) # all zeros
B = np.ones_like(A)           # all ones
P = np.random.rand(*A.shape)  # random numbers in interval [0,1)
C = np.array([[
    np.random.choice([A[nrow,ncol], B[nrow,ncol]], p=[P[nrow,ncol], 1-P[nrow,ncol]])
    for ncol in range(P.shape[1])]
    for nrow in range(P.shape[0])])

有人知道不使用for循环的方法吗?(对于大型数组,for循环极大地限制了性能......)

6tdlim6h

6tdlim6h1#

我找到了一个变通方法。只需获取一个随机数组r = np.random.rand(*A.shape),然后

C = (r <= p) * A + (r > p) * B

这样就完成了。不过,像这样的东西一定是标准库的一部分。

相关问题