numpy 中有动态数组吗?

Are there dynamic arrays in numpy?

假设我创建了 2 个 numpy 数组,其中一个是空数组,另一个大小为 1000x1000,由零组成:

import numpy as np;
A1 = np.array([])
A2 = np.zeros([1000,1000])

当我想更改 A2 中的值时,这似乎工作正常:

A2[n,m] = 17

以上代码会将A2中位置[n][m]的值改为17。

当我用 A1 尝试上述操作时,出现此错误:

A1[n,m] = 17

IndexError: index n is out of bounds for axis 0 with size 0

我知道为什么会这样,因为A1中没有定义位置[n,m],这是有道理的,但我的问题如下:

如果在 n 或 m 或两者都大于数组 A 的边界时输入 A[n,m] = somevalue,是否有一种方法可以定义动态数组而不用新行和新列更新数组?

它不必在 numpy 中,任何可以更新数组大小的库或方法都很棒。如果它是一种方法,我可以想象有一个 if 循环来检查 [n][m] 是否超出范围并对其进行处理。

我有 MATLAB 背景,可以很容易地做到这一点。我试图在 numpy.array 的文档中找到与此相关的内容,但一直没有成功。

编辑: 我想知道在 Python 中是否可以通过某种方式创建动态列表,而不仅仅是在 numpy 库中。从这个问题看来,它不适用于 numpy Creating a dynamic array using numpy in python.

这在 numpy 中无法完成,技术上也无法在 MATLAB 中完成。 MATLAB 在幕后所做的是创建一个全新的矩阵,然后将所有数据复制到新矩阵,然后删除旧矩阵。它 不是 动态调整大小,由于 arrays/matrices 的工作方式,这实际上是不可能的。这非常慢,尤其是对于大型阵列,这就是为什么 MATLAB 现在警告您不要这样做。

Numpy 和 MATLAB 一样,不能调整数组的大小(实际上,与 MATLAB 不同,它在技术上可以,但前提是你很幸运,所以我建议不要尝试)。但是为了避免这在 MATLAB 中导致的混乱和缓慢的代码,numpy 要求您显式创建新数组(使用 np.zeros)然后复制数据。

Python,不像MATLAB,实际上确实有一个真正可调整大小的数据结构:list。列表仍然需要有足够的元素,因为这避免了在 MATLAB 中难以捕获的静默索引错误,但您可以调整数组的大小并获得非常好的性能。您可以使用列表的嵌套列表来创建有效的 n 维列表。然后,列表完成后,您可以将其转换为 numpy 数组。