为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2024-01-04 15:20:23
我想修改存储在列表中的 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 arrayh=sum(length) # to find the total number of rowsfor 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我很感谢您提前提供帮助。
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您可以在没有循环的情况下完成此操作,但它仍然比可接受的解决方案慢(大数据时为 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。


查看完整回答
反对 回复 2024-01-04
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

一个简单低效的解决方案:


import numpy as np


elements= [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_elements

Out[11]: 

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

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

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


查看完整回答
反对 回复 2024-01-04
?
holdtom

TA贡献1805条经验 获得超10个赞

试试这个


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]]


查看完整回答
反对 回复 2024-01-04
  • 3 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信