Bug:ValueError: setting an array element with a sequence. The requested array...

出现的问题:ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (90,) + inhomogeneous part.

截图如下:
请添加图片描述

问题原因:我们在对高维度list列表进行转换时,里面的子列表长度不同导致转换成numpy的失败,因为numpy无法将不同长度的list列表进行转换,所以报此错误。错误的代码类似下面的代码:
list = [[1,2,3], [3,4],[7,8,9,0,1,2,3,4,5]]
np_list = np.array(list)

问题的解决:1.如何将该list数组转换为numpy数组。2.如何将该数组转换为一维的numpy数组

问题1:

上述代码可以采用下面这种方式来解决该问题。

list = [[1,2,3], [3,4],[7,8,9,0,1,2,3,4,5]]

max_len = max(len(sub_lst) for sub_lst in list)

padded_lst = [np.pad(sub_lst, (0, max_len-len(sub_lst)), constant_values =(999)) for sub_lst in list]
padded_lst = np.array(padded_lst)

代码讲解:首先我们获取到list子列表的最长长度,这样方便我们进行填充动作。然后使用np.pad操作将list数组填充到同一长度(即list子数组的最长长度),然后在这里我们选择999进行填充,方便后续进行筛选(选择一个原数组里面没有的值进行填充即可)

问题2:

可以使用下列代码来将上述的数组变成numpy一维数组

padded_lst = np.array(padded_lst).reshape(-1)

value_to_remove = 999
indices =  padded_lst!= value_to_remove
new_arr = padded_lst[indices]
print (new_arr)
print (type(new_arr))

获取到的效果如下:

代码讲解:首先我们获取到了一个numpy数组,然后我们将其展开到一维,然后进行遍历,获取到我们填充值所在的下标,最后将其进行删除,即可获得最原始的list数组所展开得到的numpy数组

点个赞再走吧!

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值