【发布时间】:2020-09-03 07:44:23
【问题描述】:
如果给定一个具有相同维度和长度的列表或 numpy 数组,则定义为
lista = [5,2,5,...]
listb = [5,1,8,...]
listc = [1,7,8,...]
listd = [1,0,5,...]
liste = [1,2,1,...]
listf = [9,1,8,...]
如何获得一个多维数组,其中第一个索引被分组并放入多维数组中?
resulting_list = [[[5,2,5,...], [5,1,8,...]],
[[1,7,8,...], [1,0,5,...], [1,2,1,...]],
[[9,1,8,...]]]
我对此的解决方案是一个 for 循环,但我基本上没有成功,使用 numpy.append、numpy.concatenate、numpy.vstack 等都没有成功。
这里是我的示例解决方案之一,应该注意的是列表总是最初分组(但不一定排名为不需要)与数组中单个堆栈中的第一个索引.
#Data
lista = np.array([5,2,5])
listb = np.array([5,1,8])
listc = np.array([1,7,8])
listd = np.array([1,0,5])
liste = np.array([1,2,1])
listf = np.array([9,1,8])
list_index = np.vstack((lista, listb, listc, listd, liste, listf))
result_list = lista
for i in range(4):
if list_index[i][0] == list_index[i+1][0]:
result_list = np.append(result_list, list_index[i+1], axis=0)
else:
result_list = np.append(result_list, list_index[i+1], axis=1)
AxisError: axis 1 is out of bounds for array of dimension 1
通常我在将这些列表附加到新维度或沿特定轴时遇到问题。
【问题讨论】:
-
你不能只做
return_list = [lista, listb, listc, listd, liste, listf]吗? -
第一个索引是标识符,它们必须分开,因为将来的函数将处理 return_list。
-
np.append只是调用np.concatenate的另一种方式(如果您不提供轴,则使用展平)。在循环中重复使用这些stack/concatante中的任何一个都是一个坏主意。先用列表方法进行分组。
标签: python numpy scipy numpy-ndarray