将矩阵展平为包含值的索引位置的数组

时间:2019-08-21 20:30:49

标签: python python-3.x numpy

给出一个numpy矩阵my_matrix

import numpy as np

my_matrix = np.array([[1.2,2.3,None],[4.5,3.4,9.3]])

如何有效地将其展平为包含my_matrix的索引位置的以下数组?

[[0,0],[0,1],[0,2],[1,0],[1,1],[1,2]]

3 个答案:

答案 0 :(得分:1)

您可以尝试:

rows, cols = my_matrix.shape
[[i, j] for i in range(rows) for j in range(cols)]

输出:

[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2]]

答案 1 :(得分:0)

您可以使用ReqEntity.build().writeTo(<OutputStream>)并稍微调整返回的值

numpy.indices()

答案 2 :(得分:0)

您可以使用纯python轻松创建这样的列表:

from itertools import product
list(product(range(my_matrix.shape[0]), range(my_matrix.shape[1])))

结果是

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

如果您不使用显式列表,而只想遍历索引,则不要使用list(...)。这将节省内存和计算时间,因为仅在使用索引时会生成索引。

但是,如果要使用结果为numpy数组建立索引,则使用np.ix_可能更方便:

np.ix_(np.arange(my_matrix.shape[0]), np.arange(my_matrix.shape[1]))

输出为

(array([[0],
        [1]]), array([[0, 1, 2]]))