例如,对于具有 n 个元素的一维数组,如果我想在 Matlab 中执行此操作,我可以这样做:
A(结束+1) = 1
它将值 1 分配给数组 A 的最后一个元素,该元素现在的长度为 n+1。
Python/Numpy 中是否有等价物?
append
您可以使用or将值附加到数组/列表的末尾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) 的东西来验证这一点。
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
在 Javascript 中扩展数组(end+1)
比在 Matlab 中更惯用。