numpy中是否有动态数组?

1 人关注

假设我创建了2个numpy数组,其中一个是空数组,另一个是由0组成的大小为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: 索引n超出了轴0的范围,尺寸为0

我知道为什么会发生这种情况,因为A1中没有定义的位置[n,m],这很合理,但我的问题如下。

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

它不一定要在numpy中,任何可以更新数组大小的库或方法都会很好。如果它是一个方法,我可以想象有一个if循环来检查[n][m]是否出界,并做一些处理。

我是学MATLAB出身的,在那里做这个很容易。我试图在numpy.array的文档中找到关于这个问题的内容,但我没有成功。

EDIT: 我想知道在Python中是否有某种方法可以创建一个动态列表,而不仅仅是在numpy库中。从这个问题看来,它在 numpy 中是行不通的在python中使用numpy创建一个动态数组.

5 个评论
Preferred indexing in numpy is A2[n, m] = 17
我怀疑MATLAB是用某种形式的pad或concatenate来实现的。 因此,我估计它的速度会比较慢。 我不记得我多年前使用MATLAB时曾学过这个,但他们已经做了很多工作,使事情对普通用户来说更简单。
你所做的任何事情都可能比NumPy慢得多,而且与你可能想要使用的大多数数值编程工具不兼容(其中大多数都是建立在NumPy之上的)。Python的语义也使得这种做法从根本上不可行(特别是面向引用的变量语义,而不是Matlab的逐值传递,以及NumPy对数组视图的大量使用,我认为Matlab没有这种能力)。如果你明确地调整数组的大小,你可能会成为一个更有效的 Python 程序员。
@ArielA:例如, A2[:, 1] 做了它看起来应该做的事,选择了一个单列。而 A2[:][1] 则不然,因为它是两个独立的索引操作,并没有像编写 A2[:][1] 的人所期望的那样互动。
python
arrays
numpy
dynamic
indexoutofboundsexception
Ariel A
Ariel A
发布于 2020-02-20
1 个回答
TheBlackCat
TheBlackCat
发布于 2020-03-04
已采纳
0 人赞同