我有一个2d numpy数组。我正在寻找每一行中特定元素首次出现的指数。输出将是一个(n x 2)数组,其中n是行数,每个条目包含该特定元素首次出现的x和y坐标。
非常感谢。
答案 0 :(得分:1)
如果我正确理解了这个问题,你需要这样的东西:
import numpy as N
#
nrows=5
ncols=10
#
a=N.random.random((nrows,ncols))
b=-99*N.ones((nrows,2))
#
for j in range(nrows):
for i in range(ncols):
if(a[j,i]<0.5):
b[j,0]=i
b[j,1]=j
continue
答案 1 :(得分:1)
我不确定“s和y坐标”究竟是什么意思,所以我假设你的意思是行和列的位置。
import numpy as np
np.array([(s, list(row).index(your_element)) for s,row in enumerate(your_array)])
请注意,如果某行中未包含ValueError
,则会引发your_element
。
以下版本将为您提供一个输出,该输出可能包含的行数少于输入,但对于行中缺少ValueError
的情况,不会引发your_element
。
np.array([(s, list(row).index(your_element)) for s,row in enumerate(your_array) if your_element in row])
答案 2 :(得分:1)
>>> # generate some fake data:
>>> A = NP.random.randint(5, 10, 100).reshape(10, 10)
>>> A
array([[5, 7, 8, 8, 5, 6, 6, 9, 6, 9],
[9, 8, 8, 9, 5, 6, 6, 9, 8, 9],
[8, 5, 6, 7, 8, 9, 5, 8, 6, 7],
[5, 8, 8, 6, 9, 6, 8, 5, 8, 9],
[6, 9, 8, 8, 5, 7, 6, 5, 7, 6],
[7, 8, 6, 7, 6, 6, 7, 8, 6, 8],
[8, 6, 8, 9, 8, 8, 9, 6, 8, 7],
[8, 7, 8, 5, 9, 5, 7, 8, 6, 9],
[9, 6, 5, 9, 9, 8, 8, 9, 8, 8],
[6, 8, 5, 8, 6, 5, 8, 6, 8, 5]])
>>> # sort this 2D array along one axis (i chose row-wise)
>>> A = NP.sort(A, axis=1)
>>> A
array([[5, 5, 6, 6, 6, 7, 8, 8, 9, 9],
[5, 6, 6, 8, 8, 8, 9, 9, 9, 9],
[5, 5, 6, 6, 7, 7, 8, 8, 8, 9],
[5, 5, 6, 6, 8, 8, 8, 8, 9, 9],
[5, 5, 6, 6, 6, 7, 7, 8, 8, 9],
[6, 6, 6, 6, 7, 7, 7, 8, 8, 8],
[6, 6, 7, 8, 8, 8, 8, 8, 9, 9],
[5, 5, 6, 7, 7, 8, 8, 8, 9, 9],
[5, 6, 8, 8, 8, 8, 9, 9, 9, 9],
[5, 5, 5, 6, 6, 6, 8, 8, 8, 8]])
>>> # now diff the sorted array along the same axis
>>> A1 = NP.diff(A ,axis=1)
>>> # A1 contains non-zero values for "first occurrences" and
>>> # zero values for repeat values
>>> A1
array([[0, 1, 0, 0, 1, 1, 0, 1, 0],
[1, 0, 2, 0, 0, 1, 0, 0, 0],
[0, 1, 0, 1, 0, 1, 0, 0, 1],
[0, 1, 0, 2, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 0, 1, 0, 0],
[0, 1, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 1, 0, 0, 1, 0],
[1, 2, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 2, 0, 0, 0]])
你可以根据需要重新计算结果A1,例如,作为布尔数组具有与A1相同的形状,每个单元格都是T / F,具体取决于原始值中的值matrix表示该值的第一次出现:
>>> ndx = A1==0
>>> ndx
array([[ True, False, True, True, False, False, True, False, True],
[False, True, False, True, True, False, True, True, True],
[ True, False, True, False, True, False, True, True, False],
[ True, False, True, False, True, True, True, False, True],
[ True, False, True, True, False, True, False, True, False],
[ True, True, True, False, True, True, False, True, True],
[ True, False, False, True, True, True, True, False, True],
[ True, False, False, True, False, True, True, False, True],
[False, False, True, True, True, False, True, True, True],
[ True, True, False, True, True, False, True, True, True]], dtype=bool)