python 数组赋值后 内存区域是不是同一片_将numpy数组拆分为不相等的块

在我的程序中,我用元素填充一个大的numpy数组,这些元素的数量我事先不知道。由于每次向numpy数组添加单个元素是低效的,所以我增加了它的大小,长度为10000的块用零初始化。这就导致了这样一种情况,最终我得到了一个尾数为0的数组。我想要的是数组,它的长度正好是有意义元素的数量(因为后来我无法区分零值和零值的实际数据点)。然而,直接复制切片会使RAM消耗翻倍,这是不可取的,因为我的数组相当大。我研究了numpy.split函数,但它们似乎只将数组分成大小相等的块,这当然不适合我。在

我用下面的代码来说明这个问题:import numpy, os, random

def check_memory(mode_peak = True, mark = ''):

"""Function for measuring the memory consumption (Linux only)"""

pid = os.getpid()

with open('/proc/{}/status'.format(pid), 'r') as ifile:

for line in ifile:

if line.startswith('VmPeak' if mode_peak else 'VmSize'):

memory = line[: -1].split(':')[1].strip().split()[0]

memory = int(memory) / (1024 * 1024)

break

mode_str = 'Peak' if mode_peak else 'Current'

print('{}{} RAM consumption: {:.3f} GB'.format(mark, mode_str, memory))

def generate_element():

"""Test element generator"""

for i in range(12345678):

yield numpy.array(random.randrange(0, 1000), dtype = 'i4')

check_memory(mode_peak = False, mark = '#1 ')

a = numpy.zeros(10000, dtype = 'i4')

i = 0

for element in generate_element():

if i == len(a):

a = numpy.concatenate((a, numpy.zeros(10000, dtype = 'i4')))

a[i] = element

i += 1

check_memory(mode_peak = False, mark = '#2 ')

a = a[: i]

check_memory(mode_peak = False, mark = '#3 ')

check_memory(mode_peak = True, mark = '#4 ')

该输出:

^{pr2}$

有谁能帮我找到一个解决方案,不显着惩罚运行时间或RAM消耗?在

编辑:

我试着用a = numpy.delete(a, numpy.s_[i: ])

以及a = numpy.split(a, (i, ))[0]

然而,它同样会导致内存消耗翻倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值