我有一个 numpy 数组,其中包含:
[1, 2, 3]
我想创建一个包含以下内容的数组:
[1, 2, 3, 1]
也就是说,我想将第一个元素添加到数组的末尾。
我已经试过了显而易见的方法:
np.concatenate((a, a[0]))
但是我在说 ValueError: arrays must have same number of dimensions的时候出错了
ValueError: arrays must have same number of dimensions
我不明白,这两个数组都是1d 数组。
a[0]不是数组,它是 a的第一个元素,因此没有维。
a[0]
a
尝试使用 a[0:1],它将返回单个条目数组中 a的第一个元素。
a[0:1]
试试这个:
np.concatenate((a, np.array([a[0]])))
Http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
Concatenate 需要两个元素都是 numpy 数组; 但是,[0]不是数组。这就是它不起作用的原因。
append()创建一个新数组,该数组可以是带有追加元素的旧数组。
append()
我认为使用正确的方法添加一个元素更为正常:
a = numpy.append(a, a[0])
t = np.array([2, 3]) t = np.append(t, [4])
这可能有点夸张,但我总是使用 np.take函数来执行任何环绕索引:
np.take
>>> a = np.array([1, 2, 3]) >>> np.take(a, range(0, len(a)+1), mode='wrap') array([1, 2, 3, 1]) >>> np.take(a, range(-1, len(a)+1), mode='wrap') array([3, 1, 2, 3, 1])
假设它是 a=[1,2,3],你希望它是 [1,2,3,1]。
a=[1,2,3]
[1,2,3,1]
您可以使用内置的 append 函数
np.append(a,1)
这里1是一个 int,它可能是一个字符串,它可能属于数组中的元素,也可能不属于数组中的元素。指纹: [1,2,3,1]
这个命令,
numpy.append(a, a[0])
不改变 a数组。但是,它返回一个新的修改过的数组。 因此,如果需要修改 a,则必须使用以下内容。
如果只是偶尔附加一次或一次,那么在数组中使用 np.append应该没问题。这种方法的缺点是,每次调用一个完全新的数组时,都会为其分配内存。当为大量样本增长数组时,最好预先分配数组(如果总大小已知) ,或者在列表中添加一个数组,然后转换为数组。
np.append
使用 np.append:
b = np.array([0]) for k in range(int(10e4)): b = np.append(b, k) 1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
之后使用 python list 转换为 array:
d = [0] for k in range(int(10e4)): d.append(k) f = np.array(d) 13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
预分配数字数组:
e = np.zeros((n,)) for k in range(n): e[k] = k 9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
当最终的大小是未知的预分配是困难的,我尝试预分配块50,但它没有接近使用列表。
85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
如果要添加元素,请使用 append()
在这种情况下,a = numpy.append(a, 1)在数组的末尾添加1
a = numpy.append(a, 1)
如果要插入元素,请使用 insert()
insert()
在这种情况下,您可以使用索引设置数组中的位置,将1放在您希望的位置。