假设变量包含多个数组,例如:
data = array([[1,2,3],
[4,5,6],
[10,11,12]],dtype=float32)
array([[1,2,3],
[4,5,6],
[7,8,9]],dtype=float32)
我想比较中心元素(即两个数组中的5
)与它们各自数组中的所有元素,并返回其值大于中心元素2倍(5x2)的最大元素在两个数组中均= 10),否则返回中心元素。
以上示例的预期输出:
data = [[12],
[5]]
答案 0 :(得分:1)
这将满足我的要求:
import numpy as np
data = [np.array([[1, 2, 3],
[4, 5, 6],
[9, 11, 12]], dtype=int),
np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=int)]
output = []
for arr in data:
centre = arr[len(arr)//2, len(arr)//2]
maximum = np.max(arr)
if maximum > (centre * 2):
output.append(maximum)
else:
output.append(centre)
print(output)
输出
[12, 5]
除了有趣的是,从python 3.8开始,您还可以使用赋值(aka Walrus)运算符在单个列表行中执行此操作。
print([maximum if (maximum:= np.max(x)) > ((centre := x[(point := len(x)//2), point]) * 2) else centre for x in data])
答案 1 :(得分:1)
import numpy as np
def getMax(array):
shape = array.shape
l = shape[0]
r = shape[1]
middle = array[l // 2, r // 2]
_max = np.amax(array)
return _max if _max > 2 * middle else middle
d1 = np.array([[1,2,3],
[4,5,6],
[9,10,11]])
d2 = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
data = [d1, d2]
ans = []
for d in data:
ans.append(getMax(d))
print(ans) # [11, 5]
假设您使用的是numpy,这就是我对3 x 3矩阵的解析度。