【发布时间】:2021-07-23 23:29:59
【问题描述】:
我正在尝试根据源数组中有多少个数组来替换一个数组的值。我根据总和从替换数组中的给定索引中分配一个值。因此,如果连续有 2 个,则为物种分配一个值l1[1],如果有一个单元,则为输出分配一个值l1[0]。
在具体的例子中会更好看:
import numpy as np
l1 = np.array([4, 5])
x112 = np.array([[0, 0], [0, 1], [1, 1], [0, 0], [1, 0], [1, 1]])
array([[0, 0],
[1, 0],
[1, 1],
[0, 0],
[1, 0],
[1, 1]])
需要的输出:
[[0]
[4]
[5]
[0]
[4]
[5]]
我通过计算每行中的单位并使用np.where进行相应分配来做到这一点:
x1x2 = np.array([0, 1, 2, 0 1, 2]) #count value 1
x1x2 = np.where(x1x2 != 1, x1x2, l1[0])
x1x2 = np.where(x1x2 != 2, x1x2, l1[1])
print(x1x2)
输出
[0 4 5 0 4 5]
这可以更有效地完成吗?
【问题讨论】:
-
如果行中的个数(单位数)大于
l1的长度,比如 100 怎么办? -
这只是整个代码的一部分,不会出现这种情况,如果l1 = [100] 那么x112也会适应它的大小
-
你做得很好。也许 Numba-JITed 循环可能更有效,但它对您的矢量化代码来说是一个小的改进。 PS 在这种情况下你可以得到
x1x2 = x112[:,0] + x112[:,1]。