使用ndarray而不是python数组的原因是什么

2024-04-20 03:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我用一些迭代来构建一个类。数据以数组形式显示,不使用numpy对象。在我的代码中,我经常使用.append来创建另一个数组。在某个时候,我把一个大数组1000x2000改为数字阵列. 现在我有一个又一个错误。我开始将所有数组转换成ndarray,但是像.append这样的注释不再起作用。我开始在指向行、列或单元格时遇到问题。必须重新生成所有代码。在

我试图用谷歌搜索一个问题的答案:“与普通数组相比,使用ndarray有什么好处?我找不到一个合理的答案。”。你能写下我什么时候开始使用ndarray吗?如果在你的练习中你是同时使用它们还是只坚持一个。在

很抱歉,如果这个问题是一个初学者的水平,但我是新的python,只是尝试从Matlab和想了解什么是利弊。谢谢


Tags: 数据对象答案代码numpy错误水平数字
3条回答

array.array可以动态更改大小。如果您从某个源收集数据,最好使用array.array。但是array.array只是一维的,没有计算函数来处理它。所以,当你想用你的数据做一些计算时,把它转换成numpy.ndarray,并在numpy中使用函数。在

numpy.frombuffer可以创建一个与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数组需要比Python列表更少的空间。因此,在NumPy数组(内存中)中可以处理比Python列表更多的数据。在
  • NumPy数组有大量的函数和方法不可用 到Python列表或Python数组。在

是的,您不能简单地将列表转换为NumPy数组并期望代码继续工作。方法不同,布尔语义不同。为了获得最佳性能,甚至可能需要更改算法。在

但是,如果您正在寻找一个Python替代Matlab,您肯定会找到NumPy的用途。值得学习。在

NumPy和Python数组共享高效存储在内存中的特性。在

NumPy数组可以加在一起,乘以一个数,你可以计算,比方说,在一个函数调用中它们所有值的正弦值,等等。正如HYRY指出的,它们也可以有多个维度。对于Python数组,不能这样做。在

另一方面,Python数组确实可以附加到。注意,NumPy数组可以连接在一起(hstack()vstack(),…)。也就是说,NumPy数组通常意味着有固定数量的元素。在

通常,首先迭代地构建一个值列表(或Python数组),然后将其转换为NumPy数组(使用numpy.array(),或者更有效地使用numpy.frombuffer(),正如HYRY所提到的):这使得对数组(或矩阵)的数学运算非常方便地执行(复杂操作的简单语法)。或者,numpy.fromiter()可用于从迭代器构造数组。或者loadtxt()从文本文件构造它。在

相关问题 更多 >