昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1062|回复: 0
收起左侧

ndarray对象在数据选取时既可以用“[ ]”区分不同的维度,也可以用逗号分隔,那么哪个更好呢?

[复制链接]

249

主题

252

帖子

976

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
976
昊虹君 发表于 2022-11-8 13:57 | 显示全部楼层 |阅读模式
ndarray对象在数据选取时既可以用“[ ]”区分不同的维度,也可以用逗号分隔,那么哪个更好呢?

现在有一个矩阵B,其尺寸为两行四列三通道。
我们想选取矩阵B的第1通道的第1行,有以下两种方法实现。

方法一:用“[ ]”区分不同的维度
示例代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. E = B[1][1]  # 选取矩阵B的第1通道的第1行的第一种方法
复制代码

运行结果如下:

                                          


方法二:用逗号分隔不同的维度
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. F = B[1, 1]  # 选取矩阵B的第1通道的第1行的第二种方法
复制代码

运行结果如下:

                                          


上面这个示例中,两种方法没有区别,但是处理下面这个问题时就有区别了,甚至方法一根本不行。

矩阵A是一个9×9的零矩阵,我想把其第三行到第五行,第三列到第五列的元素的值置为5。
此时用[ ]区分不同的维度是不行的,代码如下:
  1. import numpy as np

  2. A = np.zeros((9, 9), dtype='uint8')

  3. A[3:6][3:6] = 5
复制代码

运行结果如下:

从以上运行结果可以看出,并没有达到我们想要的效果,
但如果用逗号分隔不同的维度,即把把代码“A[3:6][3:6] = 5”改成“A[3:6, 3:6] = 5”就可以实现我们想要的效果了。
修改之后的代码如下:
  1. import numpy as np

  2. A = np.zeros((9, 9), dtype='uint8')

  3. A[3:6, 3:6] = 5
复制代码

运行结果如下:

从上面的运行结果来看,用逗号分隔不同的维度实现了我们想要的效果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2024076726 )

GMT+8, 2024-9-8 11:53 , Processed in 0.023634 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表