二维数组拒绝特殊值的计算(知道索引)

2024-10-02 14:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始学习Python和…编码。。。 我正在尝试对一个具有拒绝特殊值(我知道它在数组中的坐标)和array\u valuesreject的2D数组进行计算

例如:

import numpy as np

#A array of the points I must reject
#The first column reprensents the position in Y and the second the position in X
#of 2D array below

array_valuesreject = np.array([[1.,2.],[2.,3.], [3.,5.],[10.,2.]])

#The 2D array :

test_array = np.array([[  3051.11,   2984.85,   3059.17],
       [  3510.78,   3442.43,   3520.7 ],
       [  4045.91,   3975.03,   4058.15],
       [  4646.37,   4575.01,   4662.29],
       [  5322.75,   5249.33,   5342.1 ],
       [  6102.73,   6025.72,   6127.86],
       [  6985.96,   6906.81,   7018.22],
       [  7979.81,   7901.04,   8021.  ],
       [  9107.18,   9021.98,   9156.44],
       [ 10364.26,  10277.02,  10423.1 ],
       [ 11776.65,  11682.76,  11843.18]])


#So I would like to apply calculation on 2D array without taking account of the 
#list of coordinates defined above and i would like to keep the same dimensions array!
#(because it s represented a matrix of detectors)

#Create new_array to store values
#So I try something like that....:

new_array = numpy.zeros(shape=(test_array.shape[0],test_array.shape[1]))

for i in range(test_array.shape[0]):
    if col[i] != (array_valuesreject[i]-1):
        for j in range(test_array.shape[1]):
        if row[j] != (array_valuesreject[j]-1):
            new_array[i,j] = test_array[i,j] * 2

谢谢你的帮助!你知道吗


Tags: ofthetointestnumpynewnp
1条回答
网友
1楼 · 发布于 2024-10-02 14:30:26

这是一个使用屏蔽数组的好例子。必须遮罩计算中要忽略的坐标:

#NOTE it is an array of integers
array_valuesreject = np.array([[1, 2], [2, 2], [3, 1], [10, 2]])
i, j = array_valuesreject.T

mask = np.zeros(test_array.shape, bool)
mask[i,j] = True
m = np.ma.array(test_array, mask=mask)

打印屏蔽数组m时:

masked_array(data =
 [[3051.11 2984.85 3059.17]
 [3510.78 3442.43  ]
 [4045.91 3975.03  ]
 [4646.37   4662.29]
 [5322.75 5249.33 5342.1]
 [6102.73 6025.72 6127.86]
 [6985.96 6906.81 7018.22]
 [7979.81 7901.04 8021.0]
 [9107.18 9021.98 9156.44]
 [10364.26 10277.02 10423.1]
 [11776.65 11682.76  ]],
             mask =
 [[False False False]
 [False False  True]
 [False False  True]
 [False  True False]
 [False False False]
 [False False False]
 [False False False]
 [False False False]
 [False False False]
 [False False False]
 [False False  True]],
       fill_value = 1e+20)

并且只对非屏蔽值执行计算,这样您就可以:

new_array = m * 2

得到你想要的。你知道吗

相关问题 更多 >