繁体   English   中英

关于 Python 中 numpy 的问题

[英]Questions regarding numpy in Python

我使用普通 Python 编写了一个程序,现在我认为使用 numpy 而不是标准列表会好得多。 问题是有很多事情让我很困惑如何使用 numpy,或者我是否可以使用它。

  1. 一般 np.arrays 是如何工作的? 它们的大小是否像 C++ 向量一样是动态的,或者我是否像标准 C++ 数组一样事先声明了它们的长度和类型? 在我的程序中,我有很多情况,我创建了一个列表ex_list = []然后循环遍历某些内容ex_list.append(some_lst)加到它ex_list.append(some_lst) 我可以用 numpy 数组做类似的事情吗? 如果我知道ex_list的大小,我可以声明并清空一个然后添加到它吗?

如果我不能,假设我只调用这个列表,之后将它转换为 numpy 是否值得,即更快地调用 numpy 列表?

  1. 我可以使用 numpy 数组对每个元素执行更复杂的操作吗(不仅仅是向每个元素添加 5 个等),示例如下。

    full_pallete = [(int(1+i*(255/127.5)),0,0) for i in range(0,128)]

    full_pallete += [col for col in right_palette if col[1]!=0 or col[2]!=0 or col==(0,0,0)]

换句话说,转换为 numpy 数组然后使用 for 循环以外的其他方法循环遍历它是否有意义?

  1. 可以将 Numpy 数组附加到(请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.append.html ),尽管通常在循环中多次调用append函数会带来沉重的性能成本- 通常最好预先分配一个大数组,然后根据需要填充它。 这是因为数组本身在引擎盖下确实具有固定的大小,但这在 python 中是隐藏的。

  2. 是的,Numpy 是为许多与这些类似的操作而精心设计的。 但是,一般而言,如果 numpy 数组(或 Python 中的一般数组)非常大,则您不希望它们循环。 通过使用内置的 numpy 函数,您基本上可以利用各种编译加速优势。 例如,您可以使用numpy.where() ,而不是遍历并检查每个元素的条件。

使用 numpy 的真正原因是受益于大型数组上的预编译数学函数和数据处理实用程序 - 核心 numpy 库以及使用它们的许多其他包中的那些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM