Nano Hash - криптовалюты, майнинг, программирование

Применить формулу с двумя разными списками

У меня есть два таких списка:

listA = [51, 988, 1336, 2067, 1857, 3160]
listB = [1, 2, 3, 4, 5, 6]

Я должен применить эту формулу в списках:

n / pi * ((x*0.1)+1)**2 - pi * (x*0.1)**2

«n» — это элементы списка A, «x» — это элементы, которые соответствуют одному и тому же индексу «n» в списке B.

Мне нужно применить эту формулу ко всем элементам в обоих списках. Так что, когда цикл запускается в первый раз, ему нужно сделать это:

51/pi*((1*0.1)+1)**2 - pi *(1*0.1)**2

Для второго это нужно сделать так:

988/pi*((2*0.1)+1)**2 - pi*(2*0.1)**2

И это повторяется до конца обоих списков.

Я знаю, что мне нужно использовать цикл for, но моя проблема в том, что я не знаю, как получить элементы из второго списка. Я пытаюсь сделать это:

for n in listA:
   n/pi*((......))

Внутри скобок должны быть элементы из listB, но я не знаю, как их получить, и они должны иметь тот же индекс, что и элемент из listA. На выходе должен быть третий список с результатом применения каждой формулы.

Я попытался объяснить себя как можно лучше, но если вы не понимаете мой вопрос, не стесняйтесь задавать любые вопросы.

Заранее спасибо.


Ответы:


1

Я предполагаю, что оба списка все время имеют одинаковый размер, наиболее питоническим способом является использование понимания лямбда и списка:

listA = [51, 988, 1336, 2067, 1857, 3160]
listB = [1, 2, 3, 4, 5, 6]

from math import pi

formula = lambda n,x: n / pi * ((x*0.1)+1)**2 - pi * (x*0.1)**2

res = [ formula(a,b) for a,b in zip(listA,listB) ]

>> [19.621466242038217,
 452.96994140127384,
 718.7747248407644,
 1289.7268993630569,
 1329.8678662420382,
 2575.175332484077]
28.05.2016

2

Вы можете zip() их:

for a, b in zip([1,2,3], [4,5,6]):
  print a, b

будет давать

1 4
2 5
3 6
28.05.2016

3

векторизованный подход numpy будет намного быстрее по сравнению с обычным пониманием for/list/и т. д. особенно в больших списках:

import numpy as np

listA = np.array([51, 988, 1336, 2067, 1857, 3160])
listB = np.array([1, 2, 3, 4, 5, 6])
result = listA / np.pi * ((listB*0.1)+1)**2 - np.pi * (listB*0.1)**2

Выход:

In [175]: result
Out[175]: array([   19.61148715,   452.74017757,   718.41005008,  1289.07255327,  1329.19288378,  2573.86868192])

Время и сравнение двух списков 1M:

In [183]: A = np.random.randint(1,100, 10**6)

In [184]: B = np.random.randint(1,100, 10**6)

In [185]: formula = lambda n,x: n / pi * ((x*0.1)+1)**2 - pi * (x*0.1)**2

Векторизованный подход numpy:

In [186]: %timeit formula(A, B)
10 loops, best of 3: 65.4 ms per loop

Понимание списка:

In [191]: %timeit [ formula(a,b) for a,b in zip(A.tolist(),B.tolist()) ]
1 loop, best of 3: 3.6 s per loop

Вывод: векторизованный подход в 55 раз быстрее.

28.05.2016

4

Этот код для первой формулы:

from math import pi

def func(l1, l2):
    l = list()
    for x,n in zip(l1, l2):
        l.append(n / pi * ((x*0.1)+1)**2 - pi * (x*0.1)**2)
    return l

listA = [51, 988, 1336, 2067, 1857, 3160]
listB = [1, 2, 3, 4, 5, 6]
print  func(listA, listB)

Выход:

[-69.86851405497168, -24325.709794885548, -38773.5481974975,   
 -79297.55058963387, -52859.75700368613, -121787.02310052476]
28.05.2016
  • Они должны быть рассчитаны после формулы 1, до конца обоих списков. 28.05.2016
  • Вам нужно распечатать результат или сохранить? 28.05.2016
  • Мне нужно вернуть его, так как это произойдет внутри функции 28.05.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..