我有一个数组,例如 p = [2,3,2,4]
和一个数字,例如 n = 4
。我需要根据模式 p, n-p 生成一个由 1 和 0 组成的数组。也就是说,对于 p 中的每个元素 u,有 u 个 1 后跟 n-u 个 0。使用 np.insert 操作可以很容易地做到这一点。但 theano 没有任何插入操作。是否可以在不使用循环的情况下实现这一目标?另外,给定多个这样的 ps 和相应的 ns,是否可以在不使用循环的情况下生成 1 和 0 模式?
这是一个例子:
1 p的值:
p = [2,3,2,4,1], n=4
n-p = [2,1,2,0,3]
result = [1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0]
p 的多个值:在这种情况下,所有 p 将具有相同的维度(p 是一个二维数组)
p = [[2,3,2,4,1],[2,2,3,5,4]], n = [4, 5]
n-p = [[2,1,2,0,3],[3,3,2,0,1]]
result = [[1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],[1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0]]
请注意,我在 result[0] 末尾填充了 0,以匹配 result[0] 和 result[1] 的尺寸
最佳答案
p = numpy.array([2, 3, 2, 4])
n = 4
result = (p[:, None] > numpy.arange(n)).ravel().astype(int)
我们比较
[[2]
[3]
[2]
[4]]
到 [0 1 2 3]
获取 bool 数组,然后将其展平并将其转换为整数以获得所需的输出。
关于python - 根据模式重复数字 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38663470/