Ari*_*l A 2 python arrays numpy dynamic indexoutofboundsexception
假设我创建了 2 个 numpy 数组,其中一个是空数组,另一个大小为 1000x1000,由零组成:
import numpy as np;
A1 = np.array([])
A2 = np.zeros([1000,1000])
Run Code Online (Sandbox Code Playgroud)
当我想更改 A2 中的值时,这似乎工作正常:
A2[n,m] = 17
Run Code Online (Sandbox Code Playgroud)
上面的代码会将 A2 中位置 [n][m] 的值更改为 17。
当我使用 A1 尝试上述操作时,出现此错误:
A1[n,m] = 17
Run Code Online (Sandbox Code Playgroud)
IndexError:索引 n 超出尺寸为 0 的轴 0 的范围
我知道为什么会发生这种情况,因为 A1 中没有定义位置 [n,m] 这是有道理的,但我的问题如下:
A[n,m] = somevalue有没有一种方法可以定义动态数组,而不用在 n 或 m 或两者都大于数组 A 的边界时输入if 来更新数组?
它不一定是在 numpy 中,任何可以更新数组大小的库或方法都很棒。如果它是一个方法,我可以想象有一个 if 循环来检查 [n][m] 是否越界并执行一些操作。
我有 MATLAB 背景,因此很容易做到这一点。我试图在 numpy.array 的文档中找到有关此内容的内容,但没有成功。
编辑:我想知道在Python中是否可以通过某种方式创建动态列表,而不仅仅是在numpy库中。从这个问题看来,它不适用于 numpy创建动态数组使用 numpy in python。
这在 numpy 中无法完成,从技术上讲,在 MATLAB 中也无法完成。MATLAB 在幕后所做的事情是创建一个全新的矩阵,然后将所有数据复制到新矩阵,然后删除旧矩阵。它不是动态调整大小,由于数组/矩阵的工作方式,这实际上是不可能的。这非常慢,特别是对于大型数组,这就是 MATLAB 现在警告您不要这样做的原因。
Numpy 与 MATLAB 一样,无法调整数组大小(实际上,与 MATLAB 不同,它在技术上可以,但前提是您幸运,所以我建议不要尝试)。但为了避免在 MATLAB 中导致混乱和代码缓慢,numpy 要求您显式创建新数组(使用np.zeros),然后复制数据。
与 MATLAB 不同,Python 实际上具有真正可调整大小的数据结构:list. 列表仍然需要有足够的元素,因为这可以避免在 MATLAB 中难以捕获的静默索引错误,但您可以以非常好的性能调整数组大小。您可以通过使用列表的嵌套列表来创建有效的 n 维列表。然后,列表完成后,您可以将其转换为 numpy 数组。