Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 预分配日数_Python_Numpy - Fatal编程技术网

Python 预分配日数

Python 预分配日数,python,numpy,Python,Numpy,如何预先分配数组的数组,以便更有效地进行追加。在Matlab中,有一个名为cell(required_length)的函数,它预先分配可以存储阵列的“cells” 我有一个数组,当前看起来像: a=np.array([[1,2],[1],[2,3,4]]) b=np.array([[20,2]]) 但是,我希望附加1000个与所示的“b”类似但大小不同的数组。这不仅仅是预分配数组的问题,例如np.empty((100,),dtype=int)。这同样是一个关于如何将大量列表收集

如何预先分配数组的数组,以便更有效地进行追加。在Matlab中,有一个名为cell(required_length)的函数,它预先分配可以存储阵列的“cells”

我有一个数组,当前看起来像:

a=np.array([[1,2],[1],[2,3,4]])    
b=np.array([[20,2]])    

但是,我希望附加1000个与所示的“b”类似但大小不同的数组。

这不仅仅是预分配数组的问题,例如
np.empty((100,),dtype=int)
。这同样是一个关于如何将大量列表收集到一个结构中的问题,无论是列表还是numpy数组。在我看来,与MATLAB单元的比较足以值得进一步讨论


我认为您应该使用Python列表。它们可以包含不同大小的列表或其他对象(包括数组)。您可以轻松地附加更多项(或使用extend添加多个对象)。Python永远拥有它们;MATLAB添加了单元来近似这种灵活性

np.数组
dtype=object
类似-指向对象(如列表)的指针数组。在大多数情况下,它们只是带有数组包装器的列表。可以将数组初始设置为较大的大小,并插入/设置项

A = np.empty((10,),dtype=object)
生成一个包含10个元素的数组,每个元素
None

 A[0] = [1,2,3]
 A[1] = [2,3]
 ...
也可以将元素连接到现有数组,但结果是新数组。有一个
np.append
函数,但它只是
连接的一个掩护;它不应与列表
append
混淆

如果它必须是一个数组,您可以很容易地从末尾的列表构造它。这就是你的
np.array([[1,2],[1],[2,3,4]])
所做的


关于速度问题,让我们试试简单的时间测试

def witharray(n):
    result=np.empty((n,),dtype=object)
    for i in range(n):
        result[i]=list(range(i))
    return result

def withlist(n):
    result=[]                         
    for i in range(n):
        result.append(list(range(i)))
    return result
哪种产品

In [111]: withlist(4)
Out[111]: [[], [0], [0, 1], [0, 1, 2]]

In [112]: witharray(4)
Out[112]: array([[], [0], [0, 1], [0, 1, 2]], dtype=object)

In [113]: np.array(withlist(4))
Out[113]: array([[], [0], [0, 1], [0, 1, 2]], dtype=object)
时间测试

In [108]: timeit withlist(400)
1000 loops, best of 3: 1.87 ms per loop

In [109]: timeit witharray(400)
100 loops, best of 3: 2.13 ms per loop

In [110]: timeit np.array(withlist(400))
100 loops, best of 3: 8.95 ms per loop

简单地构建一个列表列表是最快的。但是如果结果必须是对象类型数组,那么将值分配给空数组会更快。

这不仅仅是预先分配数组的问题,例如
np.empty((100,),dtype=int)
。这同样是一个关于如何将大量列表收集到一个结构中的问题,无论是列表还是numpy数组。在我看来,与MATLAB单元的比较足以值得进一步讨论


我认为您应该使用Python列表。它们可以包含不同大小的列表或其他对象(包括数组)。您可以轻松地附加更多项(或使用extend添加多个对象)。Python永远拥有它们;MATLAB添加了单元来近似这种灵活性

np.数组
dtype=object
类似-指向对象(如列表)的指针数组。在大多数情况下,它们只是带有数组包装器的列表。可以将数组初始设置为较大的大小,并插入/设置项

A = np.empty((10,),dtype=object)
生成一个包含10个元素的数组,每个元素
None

 A[0] = [1,2,3]
 A[1] = [2,3]
 ...
也可以将元素连接到现有数组,但结果是新数组。有一个
np.append
函数,但它只是
连接的一个掩护;它不应与列表
append
混淆

如果它必须是一个数组,您可以很容易地从末尾的列表构造它。这就是你的
np.array([[1,2],[1],[2,3,4]])
所做的


关于速度问题,让我们试试简单的时间测试

def witharray(n):
    result=np.empty((n,),dtype=object)
    for i in range(n):
        result[i]=list(range(i))
    return result

def withlist(n):
    result=[]                         
    for i in range(n):
        result.append(list(range(i)))
    return result
哪种产品

In [111]: withlist(4)
Out[111]: [[], [0], [0, 1], [0, 1, 2]]

In [112]: witharray(4)
Out[112]: array([[], [0], [0, 1], [0, 1, 2]], dtype=object)

In [113]: np.array(withlist(4))
Out[113]: array([[], [0], [0, 1], [0, 1, 2]], dtype=object)
时间测试

In [108]: timeit withlist(400)
1000 loops, best of 3: 1.87 ms per loop

In [109]: timeit witharray(400)
100 loops, best of 3: 2.13 ms per loop

In [110]: timeit np.array(withlist(400))
100 loops, best of 3: 8.95 ms per loop
简单地构建一个列表列表是最快的。但如果结果必须是对象类型数组,则将值分配给空数组会更快