【问题标题】:sort elements from 1d array into triangular matrix将一维数组中的元素排序为三角矩阵
【发布时间】:2020-07-27 17:51:23
【问题描述】:

我正在尝试从 1d 数组 (55,) 中移动元素

array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3,
       4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4,
       5, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1]).

我想将这个一维数组组织成如下形式:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0],
 [0, 0],
 [0]]

所以我想结束这个:

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8],
 [1, 2, 3, 4, 5, 6, 7],
 [1, 2, 3, 4, 5, 6],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4],
 [1, 2, 3],
 [1, 2],
 [1]]

最有效的方法是什么?另请注意,我想对包含 325K 元素的大型数组执行此操作,以将其组织成 807 个不同的行。

【问题讨论】:

  • 你不能用列表来做这个吗?效率不应该是你最初的目标。您要寻找的不是多维 numpy 数组。
  • Numpy 不接受非矩形数组。如果您坚持使用可变长度元素,则您的元素必须是列表之类的对象。换句话说,您不能拥有像您发布的输出那样的多维数组。

标签: python arrays numpy matrix triangular


【解决方案1】:

如果您确切知道第一行需要多少个项目,您可以这样做

import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3,
       4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4,
       5, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1])

b = []
index = 0

for i in range(10, 0, -1):
    b.append(a[index:index+i])
    index += i

for j in b:
    print(j)

会输出这个

[1 2 3 4 5 6 7 8 9 0]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8]
[1 2 3 4 5 6 7]
[1 2 3 4 5 6]
[1 2 3 4 5]
[1 2 3 4]
[1 2 3]
[1 2]
[1]

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 2018-02-16
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2019-07-16
    • 2018-12-13
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多