正在查找索引numpy python



考虑一个形状为(8,8(的NumPy数组。

我的问题:第50个元素的索引(x,y(是多少?

注意:要计算元素,请按行计算。

示例,在数组A中,其中A = [[1, 5, 9], [3, 0, 2]]的第五个元素将为"0">

有人能解释一下如何找到这个问题的一般解决方案吗?这个特定问题的解决方案是什么?

您可以使用unravel_index来查找与展平数组的索引相对应的坐标。通常np.arrays以索引0开头,您必须对此进行调整。

import numpy as np
a = np.arange(64).reshape(8,8)
np.unravel_index(50-1, a.shape)

输出:

(6, 1)

在形状为(r,c(的NumPy数组a中(就像列表列表一样(,第n个元素是

a[(n-1) // c][(n-1) % c],

假设n从1开始,如您的示例中所示。它与r无关。因此,当r=c=8,n=50时,上述公式正是

a[6][1].

让我用你的例子展示更多:

from numpy import *
a = array([[1, 5, 9], [3, 0, 2]])
r = len(a)
c = len(a[0])
print(f'(r, c) = ({r}, {c})')
print(f'Shape: {a.shape}')
for n in range(1, r * c + 1):
print(f'Element {n}: {a[(n-1) // c][(n-1) % c]}')

结果如下:

(r, c) = (2, 3)
Shape: (2, 3)
Element 1: 1
Element 2: 5
Element 3: 9
Element 4: 3
Element 5: 0
Element 6: 2

numpy.ndarray.faltten(a)返回折叠成一维的数组a的副本。请注意,计数从0开始,因此,在您的示例中,0是第4个元素,1是第0个元素。

import numpy as np
arr = np.array([[1, 5, 9], [3, 0, 2]])
fourth_element = np.ndarray.flatten(arr)[4]

fourth_element = arr.flatten()[4]

8x8矩阵也是如此。

首先需要使用np.array和range创建一个8阶的2d numpy数组。将创建的数组重塑为88在输出中,您检查第50个元素的索引是[6,1]

import numpy as np
arr = np.array(range(1,(8*8)+1)).reshape(8,8)
print(arr[6,1])

输出将为50

或者,您也可以通过numpy-where方法的帮助以通用的方式来完成它。

import numpy as np
def getElementIndex(array: np.array, element):
elementIndex = np.where(array==element)
return f'[{elementIndex[0][0]},{elementIndex[1][0]}]'
def getXYOrderNumberArray(x:int, y:int):
return np.array(range(1,(x*y)+1)).reshape(x,y)
arr = getXYOrderNumberArray(8,8)
print(getElementIndex(arr,50))

最新更新