我有一个用 numpy 创建的数组:
matriz = numpy.matrix([]);
我尝试在循环中插入行(类似):
for i in range(3) : matriz = numpy.insert(matriz, i, [i + 1, 0, 0])
我预计结果是:
matrix([[1, 0, 0], [2, 0, 0], [3, 0, 0]])
但是我得到:
matrix([[ 1., 2., 3., 0., 0., 0., 0., 0., 0.]])
我究竟做错了什么?
发生这种情况是因为您没有指明要向其添加数据的轴(
0
forfilas
和1
forcolumnas
)。如果未指定此参数,则首先将数组/矩阵展平,如您在以下文档中所见numpy.insert()
:正确的语法是:
问题是您正在尝试将包含三列的行添加到 1x0 矩阵。这会引发错误。解决方案可能是初始化一个 3 行但为空的数组。为此,我们可以使用
numpy.empty
:无论如何,有更有效的方法可以做到这一点:
我指定了数据类型,
dtype
因为如果我不这样做,它将是float
默认值。在这两种情况下,我们得到:
尽管第一种方法(使用
np.insert()
)比第二种方法(列表推导)效率低得多,但添加 100,000 行时我得到以下结果:np.insert()
: 9.337375402450562 秒list comprehensions
: 0.07504963874816895 秒