python数组元素修改_三、Numpy基础:数组元素查询、修改

一、索引

取值的顺序是从外围到最里面的元素位置,依次写入。

1.1、单值索引

import numpy as np

a = np.arange(16).reshape(2,2,4)

print("原数组:\n",a)

print("单值索引值:\n",a[1][1][2])

>>>

原数组:

[[[ 0 1 2 3]

[ 4 5 6 7]]

[[ 8 9 10 11]

[12 13 14 15]]]

单值索引值:

14

1.2、花式索引

可以通过数组,数组中写明元素位置,来索引出多个需要的元素

import numpy as np

a=np.arange(25).reshape(5,5)#定义一个5*5的二维数组

print("原数组:\n",a)

print("花式索引多值(外层取行值):\n",a[[3, 3, 1, 4]])#注意这里一定传入的是数组格式

print("花式索引多值(二次取值,先行后列):\n",a[[0,2,2,4],[0,2,4,4]])#注意这里一定传入的是数组格式

>>>

原数组:

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]

[15 16 17 18 19]

[20 21 22 23 24]]

花式索引多值(外层取行值):

[[15 16 17 18 19]

[15 16 17 18 19]

[ 5 6 7 8 9]

[20 21 22 23 24]]

花式索引多值(外层取行值):

[ 0 12 14 24]

1.3、布尔索引

可以通过设置筛选条件生成布尔数组,在通过布尔数组反向索引出符合条件的结果

import numpy as np

a=np.random.random((4,4))#生成4×4的二维数组

b=a>0.5#生成以a>0.5为筛选条件的布尔数组

print(b)

print(a[b])#根据布尔数组将原值取出,变成一维数组

>>>

[[ True True False False]

[ True True True False]

[ True True True True]

[ True False True False]]

[0.72159895 0.85017348 0.88332226 0.7494597 0.8514071 0.91133411 0.89253366 0.80979503 0.61827433 0.94660476 0.67418788]

1.4、索引器ix_()

与花式索引相比,ix_()可以以轴为单位进行遍历,而非花式索引中的单点遍历

import numpy as np

a=np.arange(24).reshape(4,6)#生成4×4的二维数组

b=a[[1,3],[3,5]]#花式索引

c=a[np.ix_([1,3],[3,5])]#索引器

d=a[[1,3]][:,[3,5]]

print("原数组:\n",a)

print("花式索引:\n",b)

print("索引器索引:\n",c)

print("c等值于d:\n",d)

>>>

原数组:

[[ 0 1 2 3 4 5]

[ 6 7 8 9 10 11]

[12 13 14 15 16 17]

[18 19 20 21 22 23]]

花式索引:

[ 9 23]

索引器索引:

[[ 9 11]

[21 23]]

c等值于d:

[[ 9 11]

[21 23]]

二、切片

numpy切片方式与python默认方式一致

切片下来的内容与原数组共享同一片内存空间

import numpy as np

a = np.arange(16).reshape(2,2,4)

print("原数组:\n",a)

print("取一个值:\n",a[1][1][2])

print("切片范围取值:\n",a[1][1][2:4])

print("更大范围的切片遍历::\n",a[0][:][0:4])

>>>

原数组:

[[[ 0 1 2 3]

[ 4 5 6 7]]

[[ 8 9 10 11]

[12 13 14 15]]]

取一个值:

14

切片范围取值:

[14 15]

更大范围的切片遍历:

[[0 1 2 3] [4 5 6 7]]

三、元素修改

通过索引和切片得到的变量直接赋值即可修改

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
numpy数组元素周围的操作可以通过以下几种方式实现: 1. 切片操作:可以使用numpy数组的切片操作来获取数组元素的周围元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下切片操作: ```python arr[i-1:i+2, j-1:j+2] ``` 这将返回一个3x3的子数组,其中心元素为arr[i,j],周围的8个元素为该子数组的其余元素。 2. 使用numpy.pad()函数:numpy.pad()函数可以用来在数组的边缘添加一个或多个值,从而扩展数组的大小。可以使用该函数来添加额外的行和列,然后通过索引访问周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python padded_arr = np.pad(arr, ((1, 1), (1, 1)), mode='constant') surrounding = padded_arr[i:i+3, j:j+3] ``` 这将在数组的边缘添加一行和一列,并使用常量值填充这些额外的元素。然后可以使用切片操作来获取中心元素周围的元素。 3. 使用numpy.roll()函数:numpy.roll()函数可以用来沿着给定轴滚动数组元素。可以使用该函数来将数组的行和列进行滚动,从而获取周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python rows, cols = arr.shape row_indices = np.arange(i-1, i+2) % rows col_indices = np.arange(j-1, j+2) % cols surrounding = arr[row_indices][:, col_indices] ``` 这将将第i行向上和向下滚动一行,并将第j列向左和向右滚动一列,从而获取中心元素周围的元素。使用模运算可以确保在数组的边缘滚动时正确处理索引。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值