python数组添加元素_Python笔记:np数组插入

做项目时遇到对图片的处理,采用的是np数组的格式,这里记录一下两种高维numpy数组插入元素的方法。

opencv读入的RGB图片是以三维数组保存的,比如cv读入一张112x112的图片,当我们用numpy.array保存时,图片的shape是(112,112,3)。如果我们要存储多张图片时,就可以用一个4维的array存储,大小是(n,112,112,3),其中n表示该数组存储了n张图片。例如,data中存储了4张RGB图片,则data.shape就是(4,112,112,3)。现在如果要在data中加入一张新图片,将data的shape变为(5,112,112,3)该如何操作呢,这里给出两种方法。

方法一:

为了简化,我们用随机数表示图片像素,且将数组简写成(5,5,3)的格式,代码如下:

data=np.random.randn(4,5,5,3)

>>> data

array([[[[-0.65701886, -0.73092507, -0.18729669],

[-0.21577764, 1.44751259, 1.03138456],

[-0.21615769, 1.15053126, 0.46693677],

[ 0.09420719, 1.05877878, -0.85416714],

[ 1.24471963, 0.56660695, 1.10677787]],

[[-1.64021609, -0.75780178, 0.44211898],

[ 0.34263124, 0.85664543, 0.66084685],

[ 0.0816111 , -0.36965015, 0.41997271],

[-1.5712022 , 0.04630779, 1.91337651],

[ 0.84040575, 0.91389125, -0.20404573]],

[[-0.96261465, 0.24767623, -0.88663733],

[ 1.9517239 , -0.63331853, 0.72894169],

[-0.33666295, 0.4304384 , 0.62999873],

[-0.16194522, -0.2411534 , 0.95761805],

[ 0.25465702, 1.21501833, -1.4115862 ]],

[[ 1.74483081, -2.14650929, 0.49860859],

[-0.0491059 , 0.73371951, 0.39070545],

[-0.17347644, -0.61127226, 0.94010674],

[-0.88242298, 1.48402577, -0.55184911],

[-1.10637579, -0.74337655, -0.75125911]],

[[ 1.58938009, 0.32992475, -0.20901635],

[-1.50000687, 0.98944698, 0.65745985],

[-0.4474161 , -0.42939482, -1.21408104],

[ 1.6196938 , -0.28061974, -0.74093507],

[-0.11479821, -1.40321618, 0.58751026]]],

[[[ 1.06500343, 1.03199761, -0.53403129],

[-0.07200298, -0.02032007, 0.77503114],

[ 1.17981762, -0.84083165, 1.3728278 ],

[-0.52457315, 0.04897288, -0.10661045],

[-0.18132417, 0.57622036, -1.0908863 ]],

[[-1.18690929, 0.96854744, 1.35841923],

[ 0.37167925, -0.52211898, -0.84746248],

[ 0.5246696 , -1.48868344, 1.99651497],

[-0.91880761, -1.01359288, -0.37330626],

[-1.42476682, -0.79879714, 0.55086846]],

[[-1.71710356, 1.16619843, -0.49551943],

[-0.93242969, -0.06425581, 0.50972815],

[ 0.43961771, -0.26014056, -0.90576086],

[-0.76434933, 0.82953291, 0.0476365 ],

[-0.35242839, 0.04160332, -0.83240829]],

[[ 0.99460732, -1.85904293, 0.71296378],

[ 1.48395695, -0.20960492, 0.09356858],

[-0.51258009, -0.50953221, -1.94136949],

[ 0.69025079, 0.79913814, -0.43216314],

[ 1.24647783, -0.1128598 , -0.2052158 ]],

[[-0.02266661, -1.29835872, -0.3317977 ],

[-1.19654952, 0.76914296, 0.61864789],

[ 0.51737536, -0.19675087, 0.17791797],

[-0.26141562, 1.30947326, 0.53709488],

[ 1.03561863, 0.10904888, -1.8391167 ]]],

[[[ 0.31433034, -1.28762693, -0.64515247],

[-0.50284828, -0.41106089, -0.36082278],

[-1.39879657, -0.32628714, -0.66821792],

[ 0.29913213, 0.78423904, 0.16453361],

[-0.58896149, -0.3233124 , 1.18199028]],

[[-0.58824645, -0.22118072, 0.75994212],

[-0.69815998, 1.17145506, 1.35193083],

[-0.44487689, -2.5028508 , -0.12734219],

[ 0.78069855, 0.02484703, 1.30876372],

[ 1.05468463, 0.01567831, -2.69111018]],

[[-1.6899878 , 1.55679228, -0.96828228],

[-0.6271565 , 1.64333062, 0.26206031],

[-0.30921778, 0.25375817, 0.00289405],

[ 0.53387525, -2.35795882, -0.76172218],

[-0.54996675, -0.33638162, -0.9525361 ]],

[[-1.27208726, -1.62980326, -0.34914451],

[-0.25182783, -1.56547862, 0.47329475],

[-0.40553374, -0.66220416, 0.34453266],

[ 1.35993968, -0.44481818, -0.04174407],

[ 2.09428528, -0.93902636, -0.2906489 ]],

[[ 1.57268391, -2.06239651, 0.26489805],

[ 0.81901401, -1.11108136, 0.67586247],

[-1.15433207, -0.06640525, 1.44323434],

[ 1.48981181, -0.42234853, -2.24749925],

[ 0.88488618, -1.82916295, 1.60695933]]],

[[[ 1.31230839, -0.79581772, 0.5008668 ],

[ 1.91340694, -0.38396696, 0.09869668],

[-0.30722693, -1.2572592 , 1.65099486],

[ 0.0727008 , 1.30482918, 0.64856954],

[-0.53976173, -1.00923766, 0.37881222]],

[[ 0.06265291, -1.1295534 , -0.93689326],

[-0.63492952, -1.47912237, -1.0853546 ],

[-1.59587621, 1.85907172, -1.0199251 ],

[-2.78014011, -0.13821651, 0.38839542],

[-0.42971258, -0.19795589, -0.3832405 ]],

[[-1.88246279, -0.25501745, -1.60569772],

[-2.10702844, -0.98186529, -0.66872995],

[ 0.61457998, 1.10201878, -1.78186509],

[ 1.23742058, 0.84842427, -0.26917308],

[-0.06685811, 0.46726791, 0.82465189]],

[[-0.2326969 , -0.02201727, -0.04110568],

[ 0.45756246, 0.05071133, 1.93512837],

[-0.21816525, -0.89737475, 1.10364852],

[-1.19080007, 0.74717986, 2.38282849],

[ 1.47909972, 0.45416996, -0.91082929]],

[[ 1.51567005, 0.90611728, 1.53503771],

[ 0.2147722 , 1.63671134, 1.16607168],

[ 1.78592745, -1.84940774, -0.54616103],

[-1.48967015, -0.16186513, 0.75484487],

[-1.10126519, -0.77621922, -0.9095051 ]]]])

表示有4张(5,5,3)的图片,现在随机生成一张(5,5,3)大小的全0图片,代码如下:

pic=np.zeros([5,5,3])

>>> pic

array([[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]],

[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]],

[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]],

[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]],

[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]]])

要将pic作为最后一张图片插入data中,有如下操作

data=np.insert(data,4,pic,0)

>>> data

array([[[[-0.65701886, -0.73092507, -0.18729669],

[-0.21577764, 1.44751259, 1.03138456],

[-0.21615769, 1.15053126, 0.46693677],

[ 0.09420719, 1.05877878, -0.85416714],

[ 1.24471963, 0.56660695, 1.10677787]],

[[-1.64021609, -0.75780178, 0.44211898],

[ 0.34263124, 0.85664543, 0.66084685],

[ 0.0816111 , -0.36965015, 0.41997271],

[-1.5712022 , 0.04630779, 1.91337651],

[ 0.84040575, 0.91389125, -0.20404573]],

[[-0.96261465, 0.24767623, -0.88663733],

[ 1.9517239 , -0.63331853, 0.72894169],

[-0.33666295, 0.4304384 , 0.62999873],

[-0.16194522, -0.2411534 , 0.95761805],

[ 0.25465702, 1.21501833, -1.4115862 ]],

[[ 1.74483081, -2.14650929, 0.49860859],

[-0.0491059 , 0.73371951, 0.39070545],

[-0.17347644, -0.61127226, 0.94010674],

[-0.88242298, 1.48402577, -0.55184911],

[-1.10637579, -0.74337655, -0.75125911]],

[[ 1.58938009, 0.32992475, -0.20901635],

[-1.50000687, 0.98944698, 0.65745985],

[-0.4474161 , -0.42939482, -1.21408104],

[ 1.6196938 , -0.28061974, -0.74093507],

[-0.11479821, -1.40321618, 0.58751026]]],

[[[ 1.06500343, 1.03199761, -0.53403129],

[-0.07200298, -0.02032007, 0.77503114],

[ 1.17981762, -0.84083165, 1.3728278 ],

[-0.52457315, 0.04897288, -0.10661045],

[-0.18132417, 0.57622036, -1.0908863 ]],

[[-1.18690929, 0.96854744, 1.35841923],

[ 0.37167925, -0.52211898, -0.84746248],

[ 0.5246696 , -1.48868344, 1.99651497],

[-0.91880761, -1.01359288, -0.37330626],

[-1.42476682, -0.79879714, 0.55086846]],

[[-1.71710356, 1.16619843, -0.49551943],

[-0.93242969, -0.06425581, 0.50972815],

[ 0.43961771, -0.26014056, -0.90576086],

[-0.76434933, 0.82953291, 0.0476365 ],

[-0.35242839, 0.04160332, -0.83240829]],

[[ 0.99460732, -1.85904293, 0.71296378],

[ 1.48395695, -0.20960492, 0.09356858],

[-0.51258009, -0.50953221, -1.94136949],

[ 0.69025079, 0.79913814, -0.43216314],

[ 1.24647783, -0.1128598 , -0.2052158 ]],

[[-0.02266661, -1.29835872, -0.3317977 ],

[-1.19654952, 0.76914296, 0.61864789],

[ 0.51737536, -0.19675087, 0.17791797],

[-0.26141562, 1.30947326, 0.53709488],

[ 1.03561863, 0.10904888, -1.8391167 ]]],

[[[ 0.31433034, -1.28762693, -0.64515247],

[-0.50284828, -0.41106089, -0.36082278],

[-1.39879657, -0.32628714, -0.66821792],

[ 0.29913213, 0.78423904, 0.16453361],

[-0.58896149, -0.3233124 , 1.18199028]],

[[-0.58824645, -0.22118072, 0.75994212],

[-0.69815998, 1.17145506, 1.35193083],

[-0.44487689, -2.5028508 , -0.12734219],

[ 0.78069855, 0.02484703, 1.30876372],

[ 1.05468463, 0.01567831, -2.69111018]],

[[-1.6899878 , 1.55679228, -0.96828228],

[-0.6271565 , 1.64333062, 0.26206031],

[-0.30921778, 0.25375817, 0.00289405],

[ 0.53387525, -2.35795882, -0.76172218],

[-0.54996675, -0.33638162, -0.9525361 ]],

[[-1.27208726, -1.62980326, -0.34914451],

[-0.25182783, -1.56547862, 0.47329475],

[-0.40553374, -0.66220416, 0.34453266],

[ 1.35993968, -0.44481818, -0.04174407],

[ 2.09428528, -0.93902636, -0.2906489 ]],

[[ 1.57268391, -2.06239651, 0.26489805],

[ 0.81901401, -1.11108136, 0.67586247],

[-1.15433207, -0.06640525, 1.44323434],

[ 1.48981181, -0.42234853, -2.24749925],

[ 0.88488618, -1.82916295, 1.60695933]]],

[[[ 1.31230839, -0.79581772, 0.5008668 ],

[ 1.91340694, -0.38396696, 0.09869668],

[-0.30722693, -1.2572592 , 1.65099486],

[ 0.0727008 , 1.30482918, 0.64856954],

[-0.53976173, -1.00923766, 0.37881222]],

[[ 0.06265291, -1.1295534 , -0.93689326],

[-0.63492952, -1.47912237, -1.0853546 ],

[-1.59587621, 1.85907172, -1.0199251 ],

[-2.78014011, -0.13821651, 0.38839542],

[-0.42971258, -0.19795589, -0.3832405 ]],

[[-1.88246279, -0.25501745, -1.60569772],

[-2.10702844, -0.98186529, -0.66872995],

[ 0.61457998, 1.10201878, -1.78186509],

[ 1.23742058, 0.84842427, -0.26917308],

[-0.06685811, 0.46726791, 0.82465189]],

[[-0.2326969 , -0.02201727, -0.04110568],

[ 0.45756246, 0.05071133, 1.93512837],

[-0.21816525, -0.89737475, 1.10364852],

[-1.19080007, 0.74717986, 2.38282849],

[ 1.47909972, 0.45416996, -0.91082929]],

[[ 1.51567005, 0.90611728, 1.53503771],

[ 0.2147722 , 1.63671134, 1.16607168],

[ 1.78592745, -1.84940774, -0.54616103],

[-1.48967015, -0.16186513, 0.75484487],

[-1.10126519, -0.77621922, -0.9095051 ]]],

[[[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ]],

[[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ]],

[[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ]],

[[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ]],

[[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ],

[ 0. , 0. , 0. ]]]])

可以看到,data的shape变为(5,5,5,3)

解释:

numpy.insert可以有三个参数(arr,obj,values),也可以有4个参数 (arr,obj,values,axis):

第一个参数arr是一个数组,可以是一维的也可以是多维的,在arr的基础上插入元素

第二个参数obj是元素插入的位置

第三个参数values是需要插入的数值

第四个参数axis是指示在哪一个轴上对应的插入位置进行插入

>>> data.shape

(5, 5, 5, 3)

>>> pic.shape

(5, 5, 3)

方法一是将新图片作为data的元素插入,下面给出方法二。

方法二是将要插入的图片pic看做一个新的图片集合,集合shape为(1,5,5,3)表示该集合中只有一张(5,5,3)的图片。

>>> data=np.random.randn(4,5,5,3)

>>> data.shape

(4, 5, 5, 3)

>>> pic=np.zeros([1,5,5,3])

>>> pic.shape

(1, 5, 5, 3)

>>> data=np.append(data,pic,axis=0)

>>> data.shape

(5, 5, 5, 3)

解释:np.append(x,y,axis)会在axis指定的维度上将x和y合并,但要注意x和y的维度必须相同。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值