【问题标题】:How to find a value in multidimensional-array based on index如何根据索引在多维数组中查找值
【发布时间】:2019-04-04 09:11:16
【问题描述】:

我有两个大小相同的多维数组。为简单起见,我现在用随机值制作它们,但它们是相关的。从 X-array 我需要找到每行的最大值。从 Y 数组中,我需要具有相应索引的值作为 X 数组中的最大值。

import numpy as np

X_splitted = np.random.random_sample([517,56])
Y_splitted = np.random.random_sample([517,56])

rows = len(Y_splitted[0])
colums = len(Y_splitted)

X_max = np.zeros(colums)
index = np.zeros(colums)
Y_corr = np.zeros(colums)

for i in range(colums):
    X_max[i] = max(X_splitted[i])
    index[i] = (np.asarray(X_splitted[i].argmax()))
    index = index.astype(int)

我设法找到了 X 数组的最大值及其对应的索引。但是,我无法将 Y 数组值与这些索引匹配。

【问题讨论】:

    标签: python multidimensional-array indexing


    【解决方案1】:

    您的代码已接近!只是需要一些调整。

    获取X数组最大值的索引

    index[i] = X_splitted[i].argmax()
    

    从 Y 数组中获取相同的索引

    y_val[i] = Y_splitted[i][index[i]]
    

    【讨论】:

    • @Floris user22... 正在获取最大 Y 值,但不是在 X 最大值相同位置的 Y 值。请参阅我的答案,该答案在最大 X 值处获得相应值。
    • @ZF007 介意吗?我的代码查找最大 X 值的索引。
    • 您在 Y splitted[i] 中搜索最大 Y 值,而不是在 X_splitted[i] 中属于 X-max 所在位置的 Y_splitted[i] 中的对应值。简单示例:x = [0, 1, 2, 3],y = [-1,2, 1, 0]。你的解决方案得到了 (3, 2) 对,我得到 (3, 0) 作为结果。解决方案之间存在微小但显着的差异。 (x_max,y_max) 或 (x_max, y_value([i][pos x_max in x_splited[i]]) 到目前为止,似乎意图是 OP 所述的后一种解决方案。我可能错了......然后 OP 需要澄清并重写所陈述的问题。
    • 我也得到 (3,0) :)。我想我可以更好地命名变量 - Y_splitted[i][X_max_index[i]]
    • 你的代码抛出错误:Traceback (most recent call last): File "...\Z\X\Y\lol.py", line 42, in <module> y_val[i] = Y_splitted[i][index[i]] IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices
    【解决方案2】:

    如果我理解您的正确,您希望 Y 值与 X_max 值对应。然后使用内联 cmets 查看下面的代码。

    ...snippet...
    
    for i in range(colums):
    
    #    print (i)
        X_max[i] = max(X_splitted[i])
    
        X_max_val = X_max[i]                    # this is local X_max value
        j = np.where(X_splitted[i]==X_max_val)  # find local X_max value position in X_splitted[i]
    
        Y_value = float(Y_splitted[i][j])       # the corresponding Y-value for X_max value.
    
        Y_corr[i] = Y_value                     # store corresponding y value in own array.
    
        xy = (X_max_val, Y_value)
    
        Result.append(xy)                       # joint values in a list.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多