猿问

如何修改存储为列表的 numpy 数组的行

我想修改存储在列表中的 numpy 数组的行。我的 numpy 数组的长度不一样。我有几个巨大的 numpy 数组存储为列表。这是我的数据(为了简单起见,我只复制了一小部分数组):


elements= [array([[971, 466, 697, 1, 15, 18, 28],

                 [5445, 4, 301, 2, 12, 47, 5]]),

           array([[5883, 316, 377, 2, 9, 87, 1]])]

然后,我想用最后一列替换每行的第四列,然后删除最后一列。我想要得到以下结果:


[array([[971, 466, 697, 1, 28, 18],

        [5445, 4, 301, 2, 5, 47]]),

 array([[5883, 316, 377, 2, 1, 87]])]

我尝试了以下代码,但没有成功:


length=[len(i) for i in elements] # To find the length of each array

h=sum(length) # to find the total number of rows

for i in range (h):

    elements[:,[4,-1]] = elements[:,[-1,4]]

    elements=np.delete(elements,[-1],1)

我面临以下错误:


TypeError: list indices must be integers or slices, not tuple

我很感谢您提前提供帮助。


互换的青春
浏览 132回答 3
3回答

一只萌萌小番薯

您可以在没有循环的情况下完成此操作,但它仍然比可接受的解决方案慢(大数据时为 1.75 倍):counts = list(map(len, elements))arr = np.concatenate(elements)arr[:, 4] = arr[:, -1]new_elements = np.split(arr[:,:-1], np.cumsum(counts)[:-1])连接速度相当慢numpy。

明月笑刀无情

一个简单低效的解决方案:import numpy as npelements= [np.array([[971, 466, 697, 1, 15, 18, 28],                     [5445, 4, 301, 2, 12, 47, 5]]),           np.array([[5883, 316, 377, 2, 9, 87, 1]])]new_elements = list()for arr in elements:    arr[:, 4] = arr[:, -1]    new_elements.append(arr[:, :-1])新的列表输出为:new_elementsOut[11]: [array([[ 971,  466,  697,    1,   28,   18],        [5445,    4,  301,    2,    5,   47]]), array([[5883,  316,  377,    2,    1,   87]])]

holdtom

试试这个p=[]for x in range(len(elements)):    for y in range(len(elements[x])):         p.append(list(elements[x][y][:4])+[elements[x][y][-1]]+[elements[x][y][-2]])print(p)[[971, 466, 697, 1, 28, 18],[5445, 4, 301, 2, 5, 47],[5883, 316, 377, 2, 1, 87]]
随时随地看视频慕课网APP

相关分类

Python
我要回答