在numpy使用中有一个可以把负值全都统一置0的技巧,比如,data数组中的相应元素需要处理,可以使用以下技巧:
data[data < 0] = 0
说到了这里面的技术细节,首先得注意到索引值的生成。data < 0,其实是进行了一个布尔量构成的矩阵,因此,赋值操作的左边其实是一个布尔索引。而直接的赋值,如此看来是针对布尔索引而进行的,后面针对这个小知识的具体使用我还得去进行更进一步的探索。
操作的演示过程如下;
In [1]: importnumpy as np
In [2]: data =np.random.randn(7,4)
In [3]: data
Out[3]:
array([[-1.79112448, 0.31230134, 2.35188945, -0.43138688],
[-0.16980782, 1.59262128, 0.83549023, 0.96182137],
[-0.39802573, 0.11213687, 2.63071268, -2.34228672],
[ 1.50063812, -0.98689011, -0.3220348 ,-0.77471036],
[ 1.66673087, 0.09119577, -1.15349213, 0.9059744 ],
[ 0.0507576 , -1.0114599 , 0.44970121, 0.67156826],
[-0.491824 , 1.72937139, -0.03956675, 0.17517367]])
In [4]: data <0
Out[4]:
array([[ True,False, False, True],
[ True, False, False, False],
[ True, False, False, True],
[False, True, True, True],
[False, False, True, False],
[False, True, False, False],
[ True, False, True, False]], dtype=bool)
In [5]: data[data< 0] = 0
In [6]: data
Out[6]:
array([[ 0. , 0.31230134, 2.35188945, 0. ],
[ 0. , 1.59262128, 0.83549023, 0.96182137],
[ 0. , 0.11213687, 2.63071268, 0. ],
[ 1.50063812, 0. , 0. , 0. ],
[ 1.66673087, 0.09119577, 0. , 0.9059744 ],
[ 0.0507576 , 0. , 0.44970121, 0.67156826],
[ 0. , 1.72937139, 0. , 0.17517367]])
暂时可能不知道这个功能实现的具体机制,只能够记忆一下后期使用。不过按照Python的基本语法,一个数组的名字肯定是不能够赋值为一个常量的,这样数组对象本身也就成为了一个常量。因为,原来的数组名本身不过是一个标签的作用。
代码测试如下:
In [7]: data = 0
In [8]: data
Out[8]: 0