[英]what is a reason to use ndarray instead of python array
我构建了一个类,对未来的数据进行了一些迭代。 数据采用数组形式,不使用numpy对象。 在我的代码中,我经常使用.append
来创建另一个数组。 在某些时候,我将一个大数组1000x2000更改为numpy.array。 现在我在出错后出错了。 我开始将所有数组转换为ndarray,但像.append
这样的注释不再起作用了。 我开始遇到指向行,列或单元格的问题。 并且必须重建所有代码。
我试着回答一个问题的答案:“使用ndarray超过正常数组的优点和优势”我找不到合理的答案。 你能写什么时候我应该开始使用ndarrays吗?如果在你的练习中你使用它们或只坚持一个。
很抱歉,如果问题是新手级别,但我是python的新手,只是尝试从Matlab移动并想了解什么是利弊。 谢谢
NumPy和Python数组共享高效存储在内存中的属性。
NumPy数组可以加在一起,乘以一个数字,你可以在一个函数调用中计算所有值的正弦值,等等。正如HYRY指出的那样,它们也可以有多个维度。 你不能用Python数组做到这一点。
另一方面,Python数组确实可以附加到。 请注意,NumPy数组可以连接在一起( hstack()
, vstack()
,...)。 也就是说,NumPy数组主要是为了拥有固定数量的元素。
通常首先迭代地构建一个列表(或Python数组),然后将其转换为NumPy数组(使用numpy.array()
,或者更有效地使用numpy.frombuffer()
,如HYRY所提到的):这允许非常方便地执行对数组(或矩阵)的数学运算(复杂运算的简单语法)。 或者,可以使用numpy.fromiter()
从迭代器构造数组。 或者loadtxt()
从文本文件构造它。
使用NumPy阵列至少有两个主要原因:
是的,您不能简单地将列表转换为NumPy数组,并期望您的代码继续工作。 方法不同,bool语义不同。 为了获得最佳性能,即使是算法也可能需要更改。
但是,如果您正在寻找Matlab的Python替代品,您肯定会找到NumPy的用途。 值得学习。
array.array
可以动态更改大小。 如果要从某些源收集数据,最好使用array.array
。 但是array.array
只是一个维度,并且没有与它有关的计算函数。 因此,当您想对数据进行一些计算时,将其转换为numpy.ndarray
,并使用numpy中的函数。
numpy.frombuffer
可以创建一个numpy.ndarray
与共享相同的数据缓冲array.array
对象,它的速度快,因为它不需要复制数据。
这是一个演示:
import numpy as np
import array
import random
a = array.array("d")
# a for loop that collects 10 channels data
for x in range(100):
a.extend([random.random() for _ in xrange(10)])
# create a ndarray that share the same data buffer with array a, and reshape it to 2D
na = np.frombuffer(a, dtype=float).reshape(-1, 10)
# call some numpy function to do the calculation
np.sum(na, axis=0)
使用NumPy数组而不是内置列表的另一个巨大优势是NumPy有一个C API,允许本机C和C ++代码直接访问NumPy数组。 因此,许多用C语言等低级语言编写的Python库希望您使用NumPy数组而不是Python列表。
参考:用于数据分析的Python:与Pandas,NumPy和IPython进行数据争夺
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.