Python / Numpy:如何分配数组的结束+ 1元素,类似于在Matlab中完成的方式?

时间:2013-10-29 19:03:47

标签: python arrays matlab numpy

例如,对于具有n个元素的一维数组,如果我想在Matlab中执行此操作,我可以这样做:

A(结束+ 1)= 1

将值1赋给数组A的最后一个元素,现在长度为n + 1.

Python / Numpy中有等效的吗?

2 个答案:

答案 0 :(得分:8)

您可以使用appendnumpy.append将数值附加到数组/列表的末尾:

# Python list
a = [1, 2, 3]
a.append(1)
# => [1, 2, 3, 1]

# Numpy array
import numpy as np
a = np.array([1, 2, 3])
a = np.append(a, 1)
# => [1, 2, 3, 1]

请注意,正如@BrenBarn所指出的那样,numpy.append方法每次执行时都会创建一个全新的数组,这会使其效率低下。

答案 1 :(得分:2)

我敢打赌Matlab / Octave操作也是如此 - 创建一个新对象。但我不知道是否有类似Python id(a)的东西来验证。

Octave中的原始时序测试支持这一点 - 通过追加创建一个大型数组比通过整个数组步进更慢。两者都比直接分配慢A=1:N

octave:36> t=time; N=1000000; A=[]; A(N)=1; for i=1:N A(i)=i; end; t-time
ans = -4.0374
octave:37> t=time; N=1000000; A=[]; for i=1:N A(end+1)=i; end; t-time
ans = -15.218

使用(end+1)扩展数组在Javascript中比Matlab更加惯用。