例如,对于具有n个元素的一维数组,如果我想在Matlab中执行此操作,我可以这样做:
A(结束+ 1)= 1
将值1赋给数组A的最后一个元素,现在长度为n + 1.
Python / Numpy中有等效的吗?
答案 0 :(得分:8)
您可以使用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
方法每次执行时都会创建一个全新的数组,这会使其效率低下。
答案 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更加惯用。