基于索引的numpy重塑

时间:2019-06-18 18:39:11

标签: python numpy reshape

我有一个数组:

arr = [
  ['00', '01', '02'],
  ['10', '11', '12'],
]

我想根据其索引重塑此数组:

reshaped = [
  [0, 0, '00'],
  [0, 1, '01'],
  [0, 2, '02'],
  [1, 0, '10'],
  [1, 1, '11'],
  [1, 2, '12'],
]

是否有numpypandas的方式来做到这一点?还是我必须做旧的for

for x, arr_x in enumerate(arr):
    for y, val in enumerate(arr_x):
        print(x, y, val)

2 个答案:

答案 0 :(得分:7)

您可以使用np.indices来获取索引,然后将所有内容拼接在一起...

arr = np.array(arr)
i, j = np.indices(arr.shape)
np.concatenate([i.reshape(-1, 1), j.reshape(-1, 1), arr.reshape(-1, 1)], axis=1)

答案 1 :(得分:1)

我将通过以下方式使用numpy.ndenumerate

import numpy as np
arr = np.array([['00', '01', '02'],['10', '11', '12']])
output = [[*inx,x] for inx,x in np.ndenumerate(arr)]
print(*output,sep='\n') # print sublists in separate lines to enhance readibility

输出:

[0, 0, '00']
[0, 1, '01']
[0, 2, '02']
[1, 0, '10']
[1, 1, '11']
[1, 2, '12']

作为旁注:此操作不是 重塑,因为重塑意味着元素移动,因为输出包含更多单元格,仅重塑是不可能做到的。