如何为我的案例增加索引



我必须找到矩阵中每列的最小值,但有两条规则;

  1. 每列将从";索引+1";上一列的,第一列除外
  2. 如果其中一列的索引恰好等于矩阵的总行数,则所有列的其余索引将等于行数

例如;

[[ "-1".  -11.    0.    8.    1. ]
[  2.    1.    0.    5.    1. ]
[  4.    1.   -2.    6.    7. ]
[  8.    3.    1.    3.    0. ]
[  5.    "0".    1.    0.    8. ]
[  9.    3.   "-1".   -1.    6.5]
[  5.    3.    2.    5.    3. ]
[ 10.    3.    7.    "1".   "-1". ]]

指数是内部报价,[0,4,5,7]

另一个例子;

[[ 1.  1.  0.  0.  1.]
[ 2.  1.  0.  5.  1.]
[-4. -1.  2.  6.  7.]
['-5'  3.  1.  1.  0.]
[ 5.  '0'.  1.  0.  8.]
[ 5.  3. '-1'. -1.  0.]
[ 5.  3.  1.  '1'.  0.]
[ 5.  3.  1.  1.  0.]]

这里的指数是[3,4,5,6,7]

我试着做了以下的事情,但是我有错误。你能告诉我怎么做吗?

def lst_min(matrix, columnindex, minIndex):
if minIndex == matrix.shape[0]:
return matrix.shape[0]
else:
return np.argmin(matrix[minIndex:, columnindex]) + minIndex
currentMinIndex = 0
lst = []
for i in range(a.shape[1]):
w = lst_min(matrix=a, columnindex=i, minIndex=currentMinIndex)
if w > a.shape[0]:
w = a.shape[0]
lst.append(w)
if w == 0:
c = 1
currentMinIndex = w + c
if currentMinIndex > a.shape[0]:
currentMinIndex = a.shape[0]

您的代码使用lst.append(w(和一些奇怪的逻辑。。。

您使用lst_min来查找最小索引,但在开始时仅使用currentMinIndex = 0(minIndex == matrix.shape[0](时的return matrix.shape[0]

FIY,

# post source code next time if you can,
# it will be really helpful to others to run your question easily
# and focus on the main problem quickly.
a = np.array(
[[ -1,  -11,    0,    8,    1. ],
[  2,    1,    0,    5,    1. ],
[  4,    1,   -2,    6,    7. ],
[  8,    3,    1,    3,    0. ],
[  5,    0,    1,    0,    8. ],
[  9,    3,   -1,   -1,    6.5],
[  5,    3,    2,    5,    3. ],
[ 10,    3,    7,    1,   -1. ]]
)
b = np.array(
[[ 1,  1,  0,  0,  1],
[ 2,  1,  0,  5,  1],
[-4, -1,  2,  6,  7],
[-5,  3,  1,  1,  0],
[ 5,  0,  1,  0,  8],
[ 5,  3, -1, -1,  0],
[ 5,  3,  1,  1,  0],
[ 5,  3,  1,  1,  0]]
)
lst = []
start_idx = 0
for vec in a.T: # forloop column-wise
if start_idx >= vec.shape[0]-1: # index compare shape, should -1
lst.append(vec.shape[0]-1) # put the last index
else: # find minimum index
min_idx = np.argmin(vec[start_idx:]) # slice it 
start_idx += min_idx # add back the true index
lst.append(start_idx) # append to result
start_idx += 1 # next column, use index + 1 (your rule 1)
if start_idx >= vec.shape[0]-1: # but if it is larger or equal, fit it back for next column use
start_idx = vec.shape[0]-1

结果应该是:

>>>lst
[0, 4, 5, 7, 7]
# code change to b.T
>>>lst
[3, 4, 5, 6, 7]

最新更新