gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:14:13 25 4
gpt4 key购买 nike

我开始使用 Python 并...编码...我正在尝试使用 array_valuesreject 对带有拒绝特殊值(我知道它在数组中的坐标)的二维数组进行计算

例如:

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

感谢您的帮助!

最佳答案

这是使用掩码数组的好例子。您必须屏蔽要在计算中忽略的坐标:

#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

得到你想要的。

关于python - 拒绝特殊值的二维数组的计算(知道索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com