python删除数组元素_python – 清除numpy数组的元素

有没有一种简单的方法可以清除numpy数组的所有元素?我试过了:

del arrayname

这将完全删除阵列.我在for循环中使用这个数组,迭代数千次,所以我更喜欢保留数组,但每次都用新元素填充它.

我试过numpy.delete,但是根据我的要求,我没有看到使用子阵列规范.

*编辑*:

数组大小不会相同.

我在开头的循环内部分配空间,如下所示.如果这是一个错误的方法,请纠正我:

arrname = arange(x*6).reshape(x,6)

我读取数据集并为数据集中的每个元组构造此数组.我所知道的是列数将是相同的但不是行数.例如,我第一次需要一个大小为(3,6)的数组,下一个元组为(1,6),下一个为(4,6),依此类推.我填充数组的方式如下:

arrname[:,0] = lstname1

arrname[:,1] = lstname2

...

换句话说,列是从元组构造的列表中填充的.因此,在下一个循环开始之前,我想清除它的元素并为连续循环做好准备,因为我不希望前一个循环中的残余混合当前内容.

最佳答案 随着手指的摇摆可能过早优化,我会提出一些想法:

你说你不希望从之前的迭代遗留下来的任何遗留物.从您的代码中可以看出,您为每个已知数量的列逐列填充每个新元素. “遗留”值似乎不是问题.考虑:

>使用arange和reshape没有任何意义.使用np.empty((n,6)).比头发更快或更零.

>您也可以从成分构建新阵列

看到:

lstname1 = np.arange(3)

lstname2 = 22*np.arange(3)

np.vstack((lstname1,lstname2)).T

# returns

array([[ 0, 0],

[ 1, 22],

[ 2, 44]])

#or

np.hstack((lstname1[:,np.newaxis],lstname2[:,np.newaxis]))

array([[ 0, 0],

[ 1, 22],

[ 2, 44]])

最后,如果你真的真的关心速度,你可以分配最大的预期大小(如果不知道你可以检查请求的大小与最后一个最大,如果它更大,那么使用np.empty((rows,cols))增加大小.

然后在每次迭代时,您创建一个更大矩阵的视图,只需要您想要的行数.这将导致numpy重用相同的缓冲区空间,而不需要在每次迭代时进行任何分配.注意:

In [36]: big = np.vstack((lstname1,lstname2)).T

In [37]: smaller = big[:2]

In [38]: smaller[:,1]=33

In [39]: smaller

Out[39]:

array([[ 0, 33],

[ 1, 33]])

In [40]: big

Out[40]:

array([[ 0, 33],

[ 1, 33],

[ 2, 44]])

注意这些建议适合您的扩展问题,并且不适合您之前关于“清除”数组的问题.即使在后一个示例中,您也可以轻松地说small.fill(0)来消除关注点,具体取决于您是否可以在迭代中可靠地重新分配数组的所有元素.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值