ndarray对象在数据选取时既可以用“[ ]”区分不同的维度,也可以用逗号分隔,那么哪个更好呢?
现在有一个矩阵B,其尺寸为两行四列三通道。
我们想选取矩阵B的第1通道的第1行,有以下两种方法实现。
方法一:用“[ ]”区分不同的维度
示例代码如下:
- import numpy as np
- B = np.array([[[11, 12, 13, 14],
- [15, 16, 17, 18]],
- [[19, 20, 21, 22],
- [23, 24, 25, 26]],
- [[27, 28, 29, 30],
- [31, 32, 33, 34]]])
- E = B[1][1] # 选取矩阵B的第1通道的第1行的第一种方法
复制代码
运行结果如下:
方法二:用逗号分隔不同的维度
- import numpy as np
- B = np.array([[[11, 12, 13, 14],
- [15, 16, 17, 18]],
- [[19, 20, 21, 22],
- [23, 24, 25, 26]],
- [[27, 28, 29, 30],
- [31, 32, 33, 34]]])
- F = B[1, 1] # 选取矩阵B的第1通道的第1行的第二种方法
复制代码
运行结果如下:
上面这个示例中,两种方法没有区别,但是处理下面这个问题时就有区别了,甚至方法一根本不行。
矩阵A是一个9×9的零矩阵,我想把其第三行到第五行,第三列到第五列的元素的值置为5。
此时用[ ]区分不同的维度是不行的,代码如下:
- import numpy as np
- A = np.zeros((9, 9), dtype='uint8')
- A[3:6][3:6] = 5
复制代码
运行结果如下:
从以上运行结果可以看出,并没有达到我们想要的效果,
但如果用逗号分隔不同的维度,即把把代码“A[3:6][3:6] = 5”改成“A[3:6, 3:6] = 5”就可以实现我们想要的效果了。
修改之后的代码如下:
- import numpy as np
- A = np.zeros((9, 9), dtype='uint8')
- A[3:6, 3:6] = 5
复制代码
运行结果如下:
从上面的运行结果来看,用逗号分隔不同的维度实现了我们想要的效果。 |