С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
1

При поиске максимального элемента (max), выдает ошибку :(

14.01.2017, 20:44. Показов 3599. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь найти максимальный элемент, что бы дальше найти все элементы которые составляют 60%+ процентов от его значимости.
Python 3.6.
Ошибка:TypeError: 'float' object is not iterable

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from math import fabs
 
def sr_arf(x,i):
     positive = [i for i in x if i >= 0]
     negative = [i for i in x if i <0]
     a = sum(positive) /  len(positive)
     b = sum(negative) /  len(negative)
     c = a + b
     d = fabs(c)
     max_=max(d) # ошибка
     print('стобец №{} среднее положительных - {} отрицательных - {}'.format(i+1,a,b,c,d),sep = '\n')
     print('стобец №{} сумма(абсолютное значение)- {} по модулю {}'.format(i+1,c,d))
     print(d)
 
with open(r"C:\2\1.txt") as file:
    mass =[list(map(int,i.split())) for i in file.readlines()]
print( 'исходный массив')
for i in mass:
    print(*(i))
print()
a = len(mass[0])
b = len(mass)
for i in range(a):
    sr_arf([mass[j][i] for j in range(b)],i)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2017, 20:44
Ответы с готовыми решениями:

Найти ошибку при поиске max min элементов массива
#include &lt;stdio.h&gt; #define N 20 int main() { int a,n,i,max,min; float sr; ...

Казус при поиске максимального элемента массива.
Доброго времени суток, имеется программа для расчета волнового сопротивления микрополоска. В...

Неполадки с индексами при поиске максимального элемента
Здравствуйте! Возникла проблема, которую пытался, но не смог решить. Задача состоит в том чтобы...

Выдает ошибку при поиске элементов в массиве
using System; namespace ConsoleApp40 { class Program { private static int...

21
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
14.01.2017, 21:16 2
Цитата Сообщение от OlimpMishka Посмотреть сообщение
Пытаюсь найти максимальный элемент
максимальный элемент чего??? одного числа? посмотри что у тебя в d лежит. там сумма среднего положительных и отрицательных.
1
20 / 20 / 17
Регистрация: 12.12.2015
Сообщений: 71
14.01.2017, 21:26 3
max(iter, [args ...] * [, key]) - Максимальный элемент последовательности.
ошибка в max(d) происходит из-за того, что d не последовательность, а число
Цитата Сообщение от OlimpMishka Посмотреть сообщение
Пытаюсь найти максимальный элемент
Максимальный элемент чего? У вас там 3 списка
Лучше выложите текст задачи, так будет всем понятнее
0
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
14.01.2017, 21:36  [ТС] 4
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
максимальный элемент чего??? одного числа? посмотри что у тебя в d лежит. там сумма среднего положительных и отрицательных
Согласен, валенок
а как вытянуть значние d по всем стобцам в один массив? Что бы потом в нем можно было найти наибольший элемент, а также те которые составляют от него больше 60%

Добавлено через 9 минут
Цитата Сообщение от id_2020 Посмотреть сообщение
Лучше выложите текст задачи, так будет всем понятнее
Есть входящйи массив данных m x n, его надо вивести с файла, дальше надо поделить рядки на уровни - отрицательный и положительный. Потом найти на этих уровнях среднее арифметическое, а потом сумму средних арифметических, дальше взять модуль суммы средних. Эту часть программа выполняет.
Дальше надо из "модуля суммы средних" найти самое большое число, и проверить будут ли в "модуле суммы средних", числа которые равны будут больше 60% самого большое числа в "модуле суммы средних". Затем вывести эти числа с ссылкой на столбец. Мол "столбец 1 "модуль суммы средних 45", столбец 3 "модуль суммы средних" 40"
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
14.01.2017, 21:41 5
можно лучше ссылку на источник задачи
0
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
14.01.2017, 21:42  [ТС] 6
вот пример
Миниатюры
При поиске максимального элемента (max), выдает ошибку :(  
0
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
14.01.2017, 21:47  [ТС] 7
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
можно лучше ссылку на источник задачи
Конечно, пытаюсь реализовать часть из "Метод случайного баланса", стр 81.
Метод старый и долгое время считался эвристическим и до сих пор не имеет точного теоретического обоснования, сделаны лишь попытки.
п.с.
Вложения
Тип файла: pdf 1belikov_v_g_ponomarev_v_d_kokovkin_shcherbak_n_i_primenenie.pdf (6.57 Мб, 4 просмотров)
0
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
14.01.2017, 21:58  [ТС] 8
п.с. думаю желания разбираться с этим всем врядли найдется, помогите вывести в массив "Сумму средних арифметических по модулю", что бы от него можно было найти числа которые составляют А*0,6 , где А - наибольше число в массиве.
п.с.с. в идеале, конечно было бы найдя А и наибольшие числа, принтануть их, и вывести в 2 массива их столбцы.
Как на скрине с экселя. 45 и 40, вывести 2 массива раздельно.
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
14.01.2017, 23:26 9
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def sr_arf(x,i):
     positive = [i for i in x if i >= 0]
     negative = [i for i in x if i <0]
     a = sum(positive) /  len(positive) # среднее ариф. чисел больше нуля
     b = sum(negative) /  len(negative) # среднее ариф. чисел меньше нуля
     d = a + b # сумма средних ариф. 
    
     return a,b,d,
 
with open("input.txt") as file:
    mass =[list(map(int,i.split())) for i in file.readlines()]
    
 
print( 'исходный массив')
for i in mass:
    print(*(i))
print()
 
a = len(mass[0])
b = len(mass)
list_positive = []
list_negative = []
list_d = []
 
for i in range(a):
    pos, neg,d = sr_arf([mass[j][i] for j in range(b)],i)
    list_positive.append(pos) # список средних положительных (для вывода в принт)
    list_negative.append(neg) # список средних отрицательных
    list_d.append(d) # список сумм средних ариф.
   
  
print ('колонки                            ' ,'       '.join(map(str,[i+1 for i in range(len(mass[0]))])))
print('среднее отрицательных    ', *(list_negative))
print('среднее положительных   ',*(list_positive))
print('среднее арифметических ',*(list_d))
print('среднее по модулю            ',*(list(map(abs,list_d))))
вот последнее 'числа которые составляют А*0,6 , где А - наибольше число в массиве.' я просто не пойму что искать.
А это максимальное число во всем массиве или колонке? и как максимальное по модулю или абсолютному значению?
1
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
14.01.2017, 23:53  [ТС] 10
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
вот последнее 'числа которые составляют А*0,6 , где А - наибольше число в массиве.' я просто не пойму что искать.
А это максимальное число во всем массиве или колонке? и как максимальное по модулю или абсолютному значению?
от "среднее по модулю", у каждой колонки свое среднее по модулю ( если смотрел скинутую выше книгу - это |X| - абсолютная величина оценки X), после этого нам надо определить по этим оценкам какие колонки ( наборы факторов), являються значительными. То есть, какие факторы наибольшие. Для этого берем среднее по модулю [45.0,0.0, 40.0, 20.0, 10.666666666666664, 20.0] и начинаем поиск самого большого значения - 45(А), дальше ставим планку значимости А*0,6 и дальше уже перебираем все значения, которые больше А*0,6(А*0,6= 45*0,6=27) и тогда у нас входят значимыми получаются 45 и 40, то есть 1 и 3 колонка.

Добавлено через 6 минут
Так будет точнее сказано:

от "среднее по модулю", у каждой колонки свое среднее по модулю ( если смотрел скинутую выше книгу - это |X| - абсолютная величина оценки X), после этого нам надо определить по этим оценкам какие колонки ( наборы точек), являються значимыми. То есть, какие абсолютные величины оценки наибольшие. Для этого берем среднее по модулю [45.0,0.0, 40.0, 20.0, 10.666666666666664, 20.0] и начинаем поиск самого большого значения - 45(А), дальше ставим планку значимости А*0,6 и дальше уже перебираем все значения, которые больше А*0,6(А*0,6= 45*0,6=27) и тогда у нас значимыми получаются 45 и 40, то есть 1 и 3 колонка.
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
15.01.2017, 00:23 11
можно в конце кода дописать
Python
1
2
3
4
list_abs = list(map(abs,list_d) )  
A = max(list_abs)
list_60 = [i if i > A*0.6 else None for i in list_abs]
print('числа больше 60%             ',*(list_60))
1
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
15.01.2017, 00:26  [ТС] 12
п.с. желательно это сделать так, что бы узнав о 1 и 3 столбце мы их могли вывестив массивы по отдельности и найти в них "Выделяющие точки".
Пример: Найти "Выделяющие точки" для 1 столбца ( [-45,-65,105,85,-5,-15,65,55]) это :
1. Разделить его на отрицательные и положительные точки
Положительные [55,65,85,105]
Отрицательные [-5,-15,-45,-65] находим и берем по модулю [5,15,45,65] ( для дальнейшего расчета)
2. Ищем выделяющиеся точки, для положительных
Ищем максимальное среди отрицательных по модулю
Отрицательные по модулю [5,15,45,65]
Максимальное будет 65
Теперь среди положительных мы ищем числа больше 65, а это 85 и 105
3. Ищем выделяющиеся точки, для отрицательных
Берем положительные [55,65,85,105] и ищем наименьшее число, это 55
И ищем все числа меньше 55 среди отрицательных по модулю [5,15,45,65]
это 45,15, 5
Выводим выделяющиеся точки
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
15.01.2017, 00:30 13
результат
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
исходный массив
-45 -45 -45 45 45 45
-65 65 -65 65 -65 65
105 -105 -105 -105 -105 -105
85 85 -85 -85 85 -85
-5 -5 5 5 -5 -5
-15 15 15 -15 15 15
65 -65 65 65 -65 -65
55 55 55 -55 -55 55
 
колонки                                 1    |   2    |   3    |   4    |   5    |   6
среднее отрицательных     -32.5 | -55.0 | -75.0 | -65.0 | -59.0 | -65.0
среднее положительных    77.5  | 55.0  | 35.0  | 45.0  | 48.333333333333336  | 45.0
среднее арифметических  45.0  | 0.0  | -40.0  | -20.0  | -10.666666666666664  | -20.0
среднее по модулю             45.0  | 0.0  | 40.0  | 20.0  | 10.666666666666664  | 20.0
числа больше 60%              45.0  | None  | 40.0  | None  | None  | None
0
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
15.01.2017, 00:34  [ТС] 14
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
результат
ага, супер
Маленький вопрос, а почему тут выводит прямые слэши которые разделяю все значения, а у меня нет Но это не критично)
А как реализовать можно "Выделяющиеся точки", есть идеи?
Хотя бы как вытянуть теперь массивы 1 и 3 столбика?
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
15.01.2017, 10:55 15
я у себя вывод изменил чтоб явно столбцы были видны.
Python
1
2
3
4
5
6
print ('колонки                                ' ,'    |   '.join(map(str,[i+1 for i in range(len(mass[0]))])))
print('среднее отрицательных    ', ' | '.join(map(str,list_negative)))
print('среднее положительных   ','  | '.join(map(str,list_positive)))
print('среднее арифметических ','  | '.join(map(str,list_d)))
print('среднее по модулю            ','  | '.join(map(str,map(abs,list_d))))
print('числа больше 60%             ','  | '.join(map(str,list_60)))
Добавлено через 10 часов 10 минут
Цитата Сообщение от OlimpMishka Посмотреть сообщение
Хотя бы как вытянуть теперь массивы 1 и 3 столбика
ну если в дальнейшем ты собираешься работать с списками элементов каждого столбца то собери их в список
Python
1
list_column = [[mass[j][i] for j in range(b)] for i in range(a)]
Добавлено через 7 минут
мне кажется так будет лучше изменив цикл после 25 строки

Python
1
2
3
4
5
6
7
list_column = [[mass[j][i] for j in range(b)] for i in range(a)]
 
for i,x in enumerate(list_column):
     pos, neg,d = sr_arf(i,x)
     list_positive.append(pos) # список средних положительных (для вывода в принт)
     list_negative.append(neg) # список средних отрицательных
     list_d.append(d) # список сумм средних ариф
и измени местами аргументы в функции def sr_arf(x,i): на def sr_arf(i,x):
теперь в списке list_column списки из элементов каждого столбца и бери какие нужны по индексу
1
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
15.01.2017, 16:27  [ТС] 16
Semen-Semenich, а по какому принципу связать "числа больше 60% " с их колонками?

Вот нашли мы 45 ( это первый столбец), какой алгоритм, что бы на вывело массив 1 столбца?
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
15.01.2017, 16:44 17
по индексу
если 45 в списке числа больше 60% (а это список list_60) находиться на первом месте то это первая колонка то

Python
1
2
a = 45
print(list_column [index.list_60(a)])
или с условием поиска потому как требуемое значение может быть не одно и нужно будет вывести все колонки
Python
1
2
3
4
a = 45
for i,x in enumerate(list_60):
    if x == a:
        print(list_column[i])
1
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
15.01.2017, 16:56  [ТС] 18
не совсем понимаю
вот у нас есть
Python
1
list_60 = [i if i > A*0.6 else None for i in list_abs]
мы находим числа больше 60% они у нас идут как [45,none,40,none,none,none]
из него мы достаем 45 и с помощью
Python
1
print(list_column [index.list_60(a)])
нам выведет 1 колонку?
пишет :NameError: name 'index' is not defined
0
5035 / 3381 / 1155
Регистрация: 21.03.2016
Сообщений: 8,207
15.01.2017, 18:06 19
пардон запарился
Python
1
print(list_column[list_60.index(a)])
1
5 / 5 / 0
Регистрация: 18.11.2011
Сообщений: 92
15.01.2017, 18:26  [ТС] 20
Semen-Semenich, а как сделать так, что б автоматически вывелись значения 45 и 40, а потом уже по ним искать столбцы?
0
15.01.2017, 18:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2017, 18:26
Помогаю со студенческими работами здесь

С кажите, что не так при поиске максимального элемента в массиве
#include &lt;iostream&gt; using namespace std; int main() { int m = { 56,85,5,18,49,55,95,4,23,64...

Помогите найти ошибку при поиске отрицательного элемента массива
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void SetRussianLocale() {...

Ошибка в поиске максимального элемента массива
Здавствуйте. Написал программу для нахождения максимального элемента масссива. #include &lt;stdio.h&gt;...

Двусвязный список: при удалении элемента выдает ошибку
всем здравствуйте, есть двусвязный список, но при удалении элемента выдает ошибку, не могу понять в...

Ошибка в поиске максимального и минимального элемента в векторе
#include &lt;iostream&gt; #include &lt;qdebug.h&gt; #include &lt;vector&gt; using namespace std; int main() {...

Ошибка в коде при поиске max и min
В 17,18, 22, 23 пишет ошибку C2440. В 22, 23 пишет ошибку C2446. Подскажите пожалуйста, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru