NumPy数组替换最大和最小的值

时间:2020-01-05 23:26:47

标签: python arrays python-3.x numpy

给出以下数组(实际上,我将使用更大的数组):

ar = np.random.randn(2,10)
ar.sort()
array([[-2.08265194, -1.54667461, -0.42901332,  0.00365949,  0.60151581,
         0.69619798,  0.69741627,  0.97086132,  1.79259285,  3.2797454 ],
       [-2.06961226, -1.25542722, -0.44750088, -0.27424209, -0.22824756,
         0.4234969 ,  0.61014409,  0.93816367,  1.11788673,  1.74181219]])

对于每个元素,我想:

  1. 将最小值替换为下一个绝对值减去自身乘以10。
  2. 用下一个绝对值加自身乘以10代替最大值。

示例(最小值,第一个元素):将-2.08265194替换为-1.54667461-(1.54667461 * 10)= -17.01342072

所需结果:

array([[-17.01342072, -1.54667461, -0.42901332,  0.00365949,  0.60151581,
         0.69619798,  0.69741627,  0.97086132,  1.79259285,  19.718521349999996 ],
       [-13.80969942, -1.25542722, -0.44750088, -0.27424209, -0.22824756,
         0.4234969 ,  0.61014409,  0.93816367,  1.11788673,  12.29675403]])

1 个答案:

答案 0 :(得分:0)

这些似乎实际上是有效的。除非有一种更快的方法,否则我将使用它们(我将模拟设置为100万次迭代,因此速度是关键)。

outliers = 1
ar[:,0:outliers] = ar[:,outliers:outliers+1] - np.abs(ar[:,outliers:outliers+1])*10
ar[:,-outliers:] = ar[:,-outliers - 1:-outliers] + np.abs(ar[:,-outliers - 1:-outliers])*10