Python数组切片。 [:,:]

时间:2016-07-22 13:38:12

标签: python arrays python-2.7 numpy

我有这个代码,我正在查看和评论(我对它做了一些改进,但我还没有深入研究数学和创作部分)

宣言:

percentile = ((nextImage - BaselineMin) / (BaselineMax - BaselineMin)) * 100

其中nextImage,BaselineMin和BaselineMax都是720x600 numpy数组。

基本上,出于这个原因,我应该得到另一个720x600 Numpy arry

调用

percentile[:, :][percentile[:, :] == 0] = -999

我很想知道每个部分的作用。我和一位同事看着它并尝试用2x2和3x3样本进行复制,我们得到的只是[]。或者,我们得到了一个扁平的列表,但无法复制它。

这与数组切片有关,但我从未见过这样的事情。我已经看了一下这里的其他问题,但没有一个像这样。

3 个答案:

答案 0 :(得分:2)

据我了解,有问题的代码行如下:

"将percentile中的任何内容设置为0到-999"。

第一部分percentile[:,:]仅引用percentile中的每个元素。我相当确定你不需要在这里进行数组切片,只需替换为percentile

如果percentile中的相应元素为0且percentile[:,:] == 0,则Truepercentile上的索引应成为所有布尔值的矩阵False除此以外。同样,数组切片percentile[:,:]不是必需的。

为这样的数组建立索引称为屏蔽,布尔矩阵称为掩码。本质上,掩码选择掩码为True的索引数组的项目,以便您可以对它们执行某些操作;这里他们被设定为-999。

希望有所帮助!

答案 1 :(得分:1)

该行代码将“百分位数”中的每个元素设置为值为0到-999。

这是一个简单的2乘2的例子:

>>> import numpy as np
>>> arr = np.array([[1,2],[0,4]])
>>> arr
array([[1, 2],
       [0, 4]])
>>> arr[:,:][arr[:,:] == 0] = -999
>>> arr
array([[   1,    2],
       [-999,    4]])

Warren Wessecker所述,可以简化。请考虑以下事项:

>>> arr = np.array([[1,2],[0,4]])
>>> arr
array([[1, 2],
       [0, 4]])
>>> arr[arr == 0] = -999
>>> arr
array([[   1,    2],
       [-999,    4]])

答案 2 :(得分:1)

切割操作

第一部分

percentile[:, :] == 0或只是percentile == 0会给出一个320x600的布尔numpy数组,其中值== 0,否则为False。

第二部分

percentile[percentile == 0]给出满足条件的值,因此数组中的值为0。

第三部分和最后部分

percentile[percentile == 0] = -999,按-999更新零值。

一个例子

import numpy as np

A = np.random.rand(4, 4)
A[A >= 0.5] = 1

在这个随机样本数组中,> =到0.5的样本将被1替换。