как распечатать верхние индексы k-строк от самых слабых до самых сильных

#python #numpy

#python #numpy

Вопрос:

Я хочу создать массив numpy с помощью np.random.randint(2, size=(4,4)) . И его размер может быть изменяемым.

Я хочу напечатать верхние индексы k-строк от самых слабых до самых сильных (слабее: меньшее количество единиц), поэтому я создал такой код

 import numpy as np

arr = np.random.randint(0, 2, size = (r,c))
r, c = 5, 5
print(a)

def weak(array, k):
    np.array(array)
    sum_nums = []
    for i in range(len(array)):
        sum_nums.append((i, sum([i])))
            sorted_sum_nums = sorted(sum_nums, key=lambda x: x[1])

            answer = [idx[0] for idx in sorted_sum_nums[:int(k)]]
            return answer

weak(a, 5)
  

Я пробую этот код, но он работает плохо.
Как я могу это изменить?

Ответ №1:

Обратите внимание на отступ, вы возвращаетесь преждевременно :

 def weak(array, k):
    np.array(array)
    sum_nums = []
    for i in range(len(array)):
        sum_nums.append((i, sum([i])))
        sorted_sum_nums = sorted(sum_nums, key=lambda x: x[1])

        answer = [idx[0] for idx in sorted_sum_nums[:int(k)]]
    return answer # <== here
  

Ответ №2:

Сначала вы должны инициализировать r и c перед их вызовом, затем вы вызвали weak(a,5) a не инициализирован, я думаю, вы хотели вызвать arr вместо этого. Ниже я вернул минимальную строку массива

 import numpy as np

r, c = 5, 5
arr = np.random.randint(0, 2, size = (r,c))

def weak(array, k):
    array =np.array(array)
    sum_nums = []
    summed =[[],[]]
    for each in array:
        summ = sum(each)
        summed[0].append(summ)
        summed[1].append(array.index(each))
    
    return summed[1][summed[0].index(min(summed[0]))]

weak(arr, 5)
  

Если вы хотите вывести результат на экран.

 print(weak(arr,5))