5

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

A(结束+1) = 1

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

Python/Numpy 中是否有等价物?

4

2 回答 2

8

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方法每次执行时都会创建一个全新的数组,这使其效率低下。

于 2013-10-29T19:06:16.837 回答
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

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

于 2013-10-29T20:24:06.213 回答