Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于2d数组的Python qestion_Python_Arrays_Python 3.x_Matrix - Fatal编程技术网

关于2d数组的Python qestion

关于2d数组的Python qestion,python,arrays,python-3.x,matrix,Python,Arrays,Python 3.x,Matrix,参数应为2d数组。预期输出为2d数组中“峰值”的索引值。可以在主系统中测试,例如通过运行 d = [ [1, 2, 3], [4, 5, 6] ] print(find_peak_2d(d)) 下面是如何将嵌套列表理解与max()一起使用: 输出: (1, 2) 让我们把这一部分分解一下: max([max([(j, i, v) for i, v in enumerate(w)], key=lambda x:x[2]) for j, w in enumerate(ar

参数应为2d数组。预期输出为2d数组中“峰值”的索引值。可以在主系统中测试,例如通过运行

 d = [
    [1, 2, 3],
    [4, 5, 6]
  ]
print(find_peak_2d(d))

下面是如何将嵌套列表理解与
max()
一起使用:

输出:

(1, 2)

让我们把这一部分分解一下:

max([max([(j, i, v) for i, v in enumerate(w)], key=lambda x:x[2]) for j, w in enumerate(arr)], key=lambda x:x[1])
首先,我们只有:

max([max(r) for r in arr])
这将查找数组中的最大数,但不是其索引。 要找到最大数的索引,我们需要使用
枚举
遍历数组,同时跟踪索引:

max([max([(i, v) for i, v in enumerate(r)]) for r in arr])
如您所见,内部列表现在保留每个数字的索引和值。 但是现在我们需要告诉python如何确定该列表的
max
,因为我们不希望python简单地找到
max
索引

为此,我们可以使用一个键,该键具有
lambda x:x[1]
lambda
函数,这样python就知道只比较每个元组的第二个索引来找到
max

max([max([(i, v) for i, v in enumerate(r)], key=lambda x:x[1]) for r in arr])
现在我们有了列的索引,是时候找到行的索引了。基本上是一样的,我们使用
枚举
,以及一个具有
lambda x:x[1]
函数的键:

max([max([(i, v) for i, v in enumerate(w)], key=lambda x:x[1]) for j, w in enumerate(arr)], key=lambda x:x[1])
max([max([(j, i, v) for i, v in enumerate(w)], key=lambda x:x[2]) for j, w in enumerate(arr)], key=lambda x:x[2])[:-1]
现在,行的索引将丢失,因为在整个迭代过程中,我们没有将其存储在任何位置。为了解决这个问题, 在此处添加索引:
(i,v)
(j,i,v)

我们现在需要将两个
max
的键更改为
lambda x:x[2]
,因为元组的值现在位于第三个索引中。 最后,我们使用
[:-1]
:

max([max([(i, v) for i, v in enumerate(w)], key=lambda x:x[1]) for j, w in enumerate(arr)], key=lambda x:x[1])
max([max([(j, i, v) for i, v in enumerate(w)], key=lambda x:x[2]) for j, w in enumerate(arr)], key=lambda x:x[2])[:-1]

对于峰值,我假设您是指每个数组中的最大值? 此代码返回1D numpy数组中最大值的索引。 只需在每个数组中循环,并跟踪每个numpy数组后面最大的值和索引。 然后简单地返回索引

result = numpy.where(d == numpy.amax(d))
配合使用

这适用于N维数组

d2 = [
    [1, 2, 3],
    [4, 5, 6]
]
d3 = np.array([[0.40380192, 0.83570235, 0.55391089],
       [0.69123726, 0.22616673, 0.69294058],
       [0.20976952, 0.29562301, 0.26660186]])

print(find_peak(d2))
print(find_peak(d3))

# (1, 2)
# (0, 1)

请添加输入和预期输出,一些代码将非常有用。参数应该是2d数组。预期输出是2d数组中“峰值”的索引值。例如,可以通过运行d=[[1,2,3],[4,5,6]]打印(find_peak_2d(d))在main中测试
d2 = [
    [1, 2, 3],
    [4, 5, 6]
]
d3 = np.array([[0.40380192, 0.83570235, 0.55391089],
       [0.69123726, 0.22616673, 0.69294058],
       [0.20976952, 0.29562301, 0.26660186]])

print(find_peak(d2))
print(find_peak(d3))

# (1, 2)
# (0, 1)