【发布时间】:2022-01-07 04:16:53
【问题描述】:
抱歉标题混乱,但不知道如何使它更简洁。这是我的要求:
arr1 = np.array([3,5,9,1])
arr2 = ?(arr1)
arr2 将是:
[
[0,1,2,0,0,0,0,0,0],
[0,1,2,3,4,0,0,0,0],
[0,1,2,3,4,5,6,7,8],
[0,0,0,0,0,0,0,0,0]
]
它不需要根据最大值而变化,形状是预先知道的。所以开始我已经能够得到一个零的形状:
arr2 = np.zeros((len(arr1),max_len))
然后我当然可以像这样在 arr1 上做一个 for 循环:
for i, element in enumerate(arr1):
arr2[i,0:element] = np.arange(element)
但这可能需要很长时间,而且这里的两个维度都相当大(arr1 是几百万行,max_len 大约是 500)。在 numpy 中是否有一种干净优化的方法来做到这一点?
【问题讨论】:
-
你能通过对
np.arange(10)和arr1进行某种“外部”操作来创建一个“掩码”吗?True序列为 arr1?
标签: python numpy vectorization