#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))