考虑一个形状为(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))