19

您所在的位置:网站首页 数组前面添加元素怎么加 19

19

2024-07-11 11:07| 来源: 网络整理| 查看: 265

19_NumPy如何使用insert将元素/行/列插入/添加到数组ndarray

可以使用numpy.insert()函数将元素,行和列插入(添加)到NumPy数组ndarray。

这里将对以下内容与示例代码一起解释。

numpy.insert()概述一维数组 使用numpy.insert()插入和添加元素替换元素 二维数组的行 使用numpy.insert()插入和添加行在numpy.vstack()的开头和结尾添加行行的置换 二维数组的列 使用numpy.insert()插入和添加列在numpy.vstack()的开头和结尾添加列列的置换 numpy.insert()概述

np.insert()函数的参数如下。

arr:原始NumPy数组ndarrayobj:插入值的位置,int,slice,listvalue:要插入的元素/行/列的值axis:插入值的轴(尺寸)

原始的NumPy数组ndarray保持不变,并返回一个新的ndarray。

一维数组 使用numpy.insert()插入和添加元素

将元素插入一维数组时,请设置参数axis = np.insert()的值无(默认值可以省略)。

还可以通过在列表或数组中指定参数值来插入多个元素。

import numpy as np a = np.arange(4) print(a) # [0 1 2 3] print(np.insert(a, 2, 100)) # [ 0 1 100 2 3] print(np.insert(a, 1, [100, 101, 102])) # [ 0 100 101 102 1 2 3] print(np.insert(a, [0, 2, 4], [100, 101, 102])) # [100 0 1 101 2 3 102] 替换元素

如果要替换一维数组的元素,可以编写:原始的ndarray值被替换了,因此为方便起见创建并处理了一个副本。

_a = a.copy() _a[1] = 100 print(_a) # [ 0 100 2 3] _a = a.copy() _a[1:3] = [100, 101] print(_a) # [ 0 100 101 3]

在替换前后更改ndarray形状的操作将导致错误。例如,如果要用多个元素替换一个元素。

# _a = a.copy() # _a[1] = [100, 101, 102] # print(_a) # ValueError: setting an array element with a sequence.

用np.insert()插入并用np.delete()删除不必要的值后,可以获得所需的数组。

05_Numpy任意行&列的删除方法(numpy.delete) _a = np.insert(a, 1, [100, 101, 102]) _a = np.delete(_a, 4) print(_a) # [ 0 100 101 102 2 3] 二维数组的行 使用numpy.insert()插入和添加行

如果参数axis = None(默认值),则即使原始ndarray是多维数组,也将返回展平的一维数组。

a = np.arange(12).reshape((3, 4)) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.insert(a, 2, 100)) # [ 0 1 100 2 3 4 5 6 7 8 9 10 11]

如果要将行插入二维数组ndarray中,请设置axis = 0。

如果为参数值指定了标量值,则将插入用该值填充的行。

print(np.insert(a, 2, 100, axis=0)) # [[ 0 1 2 3] # [ 4 5 6 7] # [100 100 100 100] # [ 8 9 10 11]] 插入一维数组ndarray

可以插入一维数组ndarray或列表,其元素数等于原始ndarray的列数。

指定插入位置的参数obj也可以指定为列表或数组。在这种情况下,同一行将插入到每一行中。

b1 = np.arange(100, 104) print(b1) # [100 101 102 103] print(np.insert(a, 1, b1, axis=0)) # [[ 0 1 2 3] # [100 101 102 103] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.insert(a, 3, b1, axis=0)) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [100 101 102 103]] print(np.insert(a, [0, 2], b1, axis=0)) # [[100 101 102 103] # [ 0 1 2 3] # [ 4 5 6 7] # [100 101 102 103] # [ 8 9 10 11]] 插入二维数组ndarray

还可以插入与原始ndarray具有相同列数的二维数组ndarray。

当将指定插入位置的参数obj指定为列表(数组)时,将在每个位置插入每一行。

b2 = np.arange(100, 112).reshape((3, 4)) print(b2) # [[100 101 102 103] # [104 105 106 107] # [108 109 110 111]] print(np.insert(a, 2, b2, axis=0)) # [[ 0 1 2 3] # [ 4 5 6 7] # [100 101 102 103] # [104 105 106 107] # [108 109 110 111] # [ 8 9 10 11]] print(np.insert(a, 2, b2[2], axis=0)) # [[ 0 1 2 3] # [ 4 5 6 7] # [108 109 110 111] # [ 8 9 10 11]] print(np.insert(a, [0, 2, 3], b2, axis=0)) # [[100 101 102 103] # [ 0 1 2 3] # [ 4 5 6 7] # [104 105 106 107] # [ 8 9 10 11] # [108 109 110 111]] print(np.insert(a, range(3), b2, axis=0)) # [[100 101 102 103] # [ 0 1 2 3] # [104 105 106 107] # [ 4 5 6 7] # [108 109 110 111] # [ 8 9 10 11]] 在numpy.vstack()的开头和结尾添加行

如果要在ndarray的开头或结尾而不是在中间添加一行,除了np.insert()之外,还可以使用np.vstack()垂直连接ndarray。

元素数量等于原始ndarray的列数的一维数组ndarray或具有与原始ndarray相同列数的二维数组ndarray都可以。

print(np.vstack((a, b1))) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [100 101 102 103]] print(np.vstack((b2, a))) # [[100 101 102 103] # [104 105 106 107] # [108 109 110 111] # [ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] 行的置换

如果要替换一行,可以编写:原始ndarray已更改。

如果所选的行数相同,则切片或列表都可以。

_a = a.copy() _a[2] = b1 print(_a) # [[ 0 1 2 3] # [ 4 5 6 7] # [100 101 102 103]] _a = a.copy() _a[1] = b2[1] print(_a) # [[ 0 1 2 3] # [104 105 106 107] # [ 8 9 10 11]] _a = a.copy() _a[1:] = b2[[0, 2]] print(_a) # [[ 0 1 2 3] # [100 101 102 103] # [108 109 110 111]]

与一维数组一样,更改形状(行数)的操作会导致错误,因此在使用np.insert()插入后,请使用np.delete()删除不必要的行。

二维数组的列 使用numpy.insert()插入和添加列

如果要在二维数组ndarray中插入一列,请设置axis = 1。基本上与该行的过程相同。

print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.insert(a, 1, 100, axis=1)) # [[ 0 100 1 2 3] # [ 4 100 5 6 7] # [ 8 100 9 10 11]] c1 = np.arange(100, 103) print(c1) # [100 101 102] print(np.insert(a, 1, c1, axis=1)) # [[ 0 100 1 2 3] # [ 4 101 5 6 7] # [ 8 102 9 10 11]] print(np.insert(a, 3, c1, axis=1)) # [[ 0 1 2 100 3] # [ 4 5 6 101 7] # [ 8 9 10 102 11]]

插入二维数组ndarray时,请注意指定插入位置的参数obj。

如果要将obj指定为标量值,除非指定[x]而不是x,否则会发生错误。

c2 = np.arange(100, 106).reshape((3, 2)) print(c2) # [[100 101] # [102 103] # [104 105]] # print(np.insert(a, 1, c2, axis=1)) # ValueError: could not broadcast input array from shape (2,3) into shape (3,3) print(np.insert(a, [1], c2, axis=1)) # [[ 0 100 101 1 2 3] # [ 4 102 103 5 6 7] # [ 8 104 105 9 10 11]] print(np.insert(a, [0, 2], c2, axis=1)) # [[100 0 1 101 2 3] # [102 4 5 103 6 7] # [104 8 9 105 10 11]]

即使仅插入一列,输出也会根据插入的是一维数组还是二维数组而有所不同。这里不讨论细节,而是遵循广播规则的结果。

插入一维数组时,如果将参数obj设置为[x]或在列表(数组)中指定多个位置,则结果将与预期的不同。

print(c1) # [100 101 102] print(np.insert(a, 1, c1, axis=1)) # [[ 0 100 1 2 3] # [ 4 101 5 6 7] # [ 8 102 9 10 11]] print(np.insert(a, [1], c1, axis=1)) # [[ 0 100 101 102 1 2 3] # [ 4 100 101 102 5 6 7] # [ 8 100 101 102 9 10 11]] print(np.insert(a, [1, 3, 4], c1, axis=1)) # [[ 0 100 1 2 101 3 102] # [ 4 100 5 6 101 7 102] # [ 8 100 9 10 101 11 102]] _c1 = c1.reshape((3, 1)) print(_c1) # [[100] # [101] # [102]] print(np.insert(a, 1, _c1, axis=1)) # [[ 0 100 101 102 1 2 3] # [ 4 100 101 102 5 6 7] # [ 8 100 101 102 9 10 11]] print(np.insert(a, [1], _c1, axis=1)) # [[ 0 100 1 2 3] # [ 4 101 5 6 7] # [ 8 102 9 10 11]] print(np.insert(a, [1, 3, 4], _c1, axis=1)) # [[ 0 100 1 2 100 3 100] # [ 4 101 5 6 101 7 101] # [ 8 102 9 10 102 11 102]] 在numpy.vstack()的开头和结尾添加列

如果要在ndarray的开头或结尾而不是在中间添加列,则除了np.insert()之外,还可以使用水平连接ndarray的np.hstack()。

请注意,如果原始ndarray和要添加的ndarray的尺寸不匹配,则会发生错误。即使只有一列,也必须使用reshape()方法将其转换为二维数组。

# print(np.hstack((a, c1))) # ValueError: all the input arrays must have same number of dimensions print(_c1) # [[100] # [101] # [102]] print(np.hstack((a, _c1))) # [[ 0 1 2 3 100] # [ 4 5 6 7 101] # [ 8 9 10 11 102]] print(np.hstack((_c1, a))) # [[100 0 1 2 3] # [101 4 5 6 7] # [102 8 9 10 11]] print(np.hstack((a, c2))) # [[ 0 1 2 3 100 101] # [ 4 5 6 7 102 103] # [ 8 9 10 11 104 105]] print(np.hstack((c2, a))) # [[100 101 0 1 2 3] # [102 103 4 5 6 7] # [104 105 8 9 10 11]] 列的置换

如果要替换列,可以编写:原始ndarray已更改。

如果选择的列数相同,则切片或列表确定。

_a = a.copy() _a[:, 1] = c1 print(_a) # [[ 0 100 2 3] # [ 4 101 6 7] # [ 8 102 10 11]] _a = a.copy() _a[:, :2] = c2 print(_a) # [[100 101 2 3] # [102 103 6 7] # [104 105 10 11]] _a = a.copy() _a[:, [0, 3]] = c2 print(_a) # [[100 1 2 101] # [102 5 6 103] # [104 9 10 105]]

与前面的示例一样,更改形状(列数)的操作将导致错误,因此在使用np.insert()插入后,请使用np.delete()删除不必要的行。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3