【问题标题】:numpy reshape based on index [duplicate]基于索引的numpy重塑[重复]
【发布时间】:2019-11-01 10:56:05
【问题描述】:

我有一个数组:

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)

【问题讨论】:

  • 你需要保持整数和字符串的混合吗?一个“正常”的 numpy 数组将使用其中一个,而不是混合使用。如图所示,您正在使用列表和列表表示法。

标签: python numpy reshape


【解决方案1】:

您可以使用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)

【讨论】:

  • 单行化np.column_stack([*map(np.ravel, [*np.indices(np.shape(arr)), arr])])
【解决方案2】:

我会为此目的使用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']

附带说明:此操作不是重塑,因为重塑意味着元素的移动,因为输出包含更多单元格,因此仅通过重塑是不可能的。

【讨论】:

  • 这仍然使用 for 循环。关闭但没有雪茄。
猜你喜欢
  • 2016-04-05
  • 2020-07-11
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2013-02-04
相关资源
最近更新 更多