我有这个代码,我正在查看和评论(我对它做了一些改进,但我还没有深入研究数学和创作部分)
宣言:
percentile = ((nextImage - BaselineMin) / (BaselineMax - BaselineMin)) * 100
其中nextImage,BaselineMin和BaselineMax都是720x600 numpy数组。
基本上,出于这个原因,我应该得到另一个720x600 Numpy arry
调用
percentile[:, :][percentile[:, :] == 0] = -999
我很想知道每个部分的作用。我和一位同事看着它并尝试用2x2和3x3样本进行复制,我们得到的只是[]。或者,我们得到了一个扁平的列表,但无法复制它。
这与数组切片有关,但我从未见过这样的事情。我已经看了一下这里的其他问题,但没有一个像这样。
答案 0 :(得分:2)
据我了解,有问题的代码行如下:
"将percentile
中的任何内容设置为0到-999"。
第一部分percentile[:,:]
仅引用percentile
中的每个元素。我相当确定你不需要在这里进行数组切片,只需替换为percentile
。
如果percentile
中的相应元素为0且percentile[:,:] == 0
,则True
,percentile
上的索引应成为所有布尔值的矩阵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替换。