如果您在Python中创建1d数组,使用NumPy包有什么好处吗?

有帮助吗?

解决方案

这完全取决于您打算如何处理数组。如果你所做的只是创建简单数据类型的数组并进行I / O,那么数组模块会做得很好。

另一方面,如果您想进行任何类型的数值计算,阵列模块不会提供任何帮助。 NumPy (和 SciPy )在数组和特殊函数之间提供各种各样的操作,这些操作不仅适用于科学工作,而且适用于高级图像处理或一般需要使用大量数据执行高效计算的任何内容。

Numpy也更灵活,例如它支持任何类型的Python对象的数组,并且还能够“原生地”进行交互。如果它们符合阵列界面,则使用您自己的对象。

其他提示

为了任何可能发现这个有用的人的利益而进行小型自举(遵循@dF的优秀答案):

import numpy as np
from array import array

# Fixed size numpy array
def np_fixed(n):
    q = np.empty(n)
    for i in range(n):
        q[i] = i
    return q

# Resize with np.resize
def np_class_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q = np.resize(q, q.shape[0]*2)        
        q[i] = i
    return q    

# Resize with the numpy.array method
def np_method_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q.resize(q.shape[0]*2)
        q[i] = i
    return q

# Array.array append
def arr(n):
    q = array('d')
    for i in range(n):
        q.append(i)
    return q

isize = 1000
n = 10000000

输出结果为:

%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)

1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop

似乎array.array稍快一些,而'api'为你节省了一些麻烦,但如果你需要的不仅仅是存储双打,那么numpy.resize毕竟不是一个糟糕的选择(如果使用得当)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top