Python/Numpy:如何分配end+;数组的1个元素,类似于它';在Matlab中完成了什么?

Python/Numpy:如何分配end+;数组的1个元素,类似于它';在Matlab中完成了什么?,python,arrays,matlab,numpy,Python,Arrays,Matlab,Numpy,例如,对于具有n个元素的一维数组,如果我想在Matlab中执行此操作,我可以执行以下操作: A(结束+1)=1 将值1赋给数组A的最后一个元素,该元素现在的长度为n+1 Python/Numpy中是否有等效项?您可以使用append或Numpy.append将值附加到数组/列表的末尾: # Python list a = [1, 2, 3] a.append(1) # => [1, 2, 3, 1] # Numpy array import numpy as np a = np.arra

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

A(结束+1)=1

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


Python/Numpy中是否有等效项?

您可以使用
append
Numpy.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
方法每次执行时都会创建一个全新的数组,这使得它效率低下。

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

用八度音阶进行的粗略计时测试支持这一点——通过附加来创建一个大数组要比单步遍历整个数组慢。两者都比直接赋值慢得多,比如
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中更惯用。

A.append(1)
起作用吗?请注意,这是一个低效的操作,因为它创建了一个全新的数组。逐渐增加numpy数组的大小不是一种可扩展的方法。@BrenBarn:同意,我更新了我的答案,使其变得显而易见。
np.append
只是一个
np.concatenate
。效率与Matlab的
end+1
一样低,因此这是合适的。在最新版本的Matlab中,JIT有时足够聪明,可以识别这种模式并进行一些预分配。