【发布时间】:2023-03-09 05:53:01
【问题描述】:
受How to create a sequence of sequences of numbers in R? 帖子的启发。
问题:
我想在 NumPy 中创建以下序列。
[1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5]
我尝试了以下方法:
- 使用
np.r_的非泛型和硬编码np.r_[1:6, 2:6, 3:6, 4:6, 5:6] # array([1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5]) - 纯 Python 生成所需的数组。
n = 5 a = np.r_[1:n+1] [i for idx in range(a.shape[0]) for i in a[idx:]] # [1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5] - 创建一个二维数组并从中取出上面的三角形。
n = 5 a = np.r_[1:n+1] arr = np.tile(a, (n, 1)) print(arr) # [[1 2 3 4 5] # [1 2 3 4 5] # [1 2 3 4 5] # [1 2 3 4 5] # [1 2 3 4 5]] o = np.triu(arr).flatten() # array([1, 2, 3, 4, 5, # 0, 2, 3, 4, 5, # 0, 0, 3, 4, 5, # This is 1D array # 0, 0, 0, 4, 5, # 0, 0, 0, 0, 5]) out = o[o > 0] # array([1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5])
上述解决方案是通用的,但我想知道在 NumPy 中是否有更有效的方法。
【问题讨论】: