পাইথনে বেস 2 এ লগ ইন করুন


110

পাইথনের বেস দুটিতে আমি কীভাবে লগ গণনা করব। যেমন। আমার এই সমীকরণটি রয়েছে যেখানে আমি লগ বেস 2 ব্যবহার করছি

import math
e = -(t/T)* math.log((t/T)[, 2])

3
আপনি যদি math.log()কলটিতে ", 2" এর চারপাশে বর্গাকার বন্ধনীগুলি নিয়ে থাকেন তবে আপনার যা কাজ করা উচিত । আপনি কি এটা চেষ্টা করেছেন?
মার্টিনিউ

5
সুন্দর এনট্রপি গণনা
মুহাম্মদ আলকারৌরি

গণিত.লগ (মান, বেস)
ভ্যালেন্টিন হেইনিটস

উত্তর:


230

এটা জেনে রাখা ভাল

বিকল্প পাঠ

তবে এটিও জানেন যে math.logএকটি alচ্ছিক দ্বিতীয় যুক্তি গ্রহণ করে যা আপনাকে বেসটি নির্দিষ্ট করতে দেয়:

In [22]: import math

In [23]: math.log?
Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:    <built-in function log>
Namespace:  Interactive
Docstring:
    log(x[, base]) -> the logarithm of x to the given base.
    If the base not specified, returns the natural logarithm (base e) of x.


In [25]: math.log(8,2)
Out[25]: 3.0

6
base2.3 সংস্করণ, বিটিডব্লিউতে যুক্তি যুক্ত করা হয়েছে।
জো কোবার্গ

9
এটা কি '?' বাক্য গঠন ? আমি এর জন্য রেফারেন্স পাই না।
wap26

17
@ wap26: সর্বোপরি, আমি ব্যবহার করছি IPython ইন্টারেক্টিভ অনুবাদক। এর বৈশিষ্ট্যগুলির মধ্যে একটি (এর সাথে অ্যাক্সেস করা ?) হ'ল ডায়নামিক অবজেক্ট ইন্ট্রোস্পেকশন
unutbu

68

ভাসা → float math.log2(x)

import math

log2 = math.log(x, 2.0)
log2 = math.log2(x)   # python 3.4 or later

float → int math.frexp(x)

আপনার যদি প্রয়োজন কেবল একটি ভাসমান পয়েন্ট সংখ্যার লগ বেস 2 এর পূর্ণসংখ্যার অংশ হয়, তবে প্রকাশকটি বের করা বেশ কার্যকর:

log2int_slow = int(math.floor(math.log(x, 2.0)))
log2int_fast = math.frexp(x)[1] - 1
  • পাইথন ফ্রেইপ এক্স () সি ফাংশনটিকে ফ্রিএক্সপ্যাক () কল করে যা কেবল এক্সপোনেন্টটিকে ধরে এবং টুইট করে।

  • পাইথন ফ্রেইপ এক্স () একটি টিপল দেয় (ম্যান্টিসা, এক্সপোনেন্ট)। সুতরাং [1]ঘটক অংশ পায়।

  • 2 এর অবিচ্ছেদ্য শক্তির জন্য এক্সপোনেন্টটি আপনার প্রত্যাশার চেয়ে আরও বেশি। উদাহরণস্বরূপ 32 0.5x2⁶ হিসাবে সংরক্ষণ করা হয় ⁶ এটি উপরেরটি ব্যাখ্যা করে - 1। 1/32 এর জন্যও কাজ করে যা 0.5x2⁻⁴ হিসাবে সংরক্ষণ করা হয় ⁻⁴

  • নেতিবাচক অনন্তের দিকে মেঝে, সুতরাং লগ 31 not নয় 5. লগ ₂ (১/১17) হয় -5 নয় -4।


int → int x.bit_length()

যদি ইনপুট এবং আউটপুট উভয়ই পূর্ণসংখ্যা হয় তবে এই দেশীয় পূর্ণসংখ্যা পদ্ধতিটি খুব দক্ষ হতে পারে:

log2int_faster = x.bit_length() - 1
  • - 1কারণ 2ⁿ এর জন্য n + 1 বিট দরকার। খুব বড় পূর্ণসংখ্যার জন্য কাজ করে, যেমন 2**10000

  • নেতিবাচক অনন্তের দিকে মেঝে, সুতরাং লগ 31 not নয় 5. লগ ₂ (১/১17) হয় -5 নয় -4।


1
মজাদার. সুতরাং আপনি সেখানে 1 টি বিয়োগ করছেন কারণ ম্যান্টিসারার পরিধি [0.5, 1.0)? আমি যদি পারতাম তবে এটিকে আরও কয়েকটা উপস্থাপনা দেব।
LarsH

1
ঠিক ঠিক লার্শ 32 কে 0.5x2⁶ হিসাবে সংরক্ষণ করা হয় তাই আপনি যদি লগ 3232 চান তবে আপনার 1 টি বিয়োগ করতে হবে । 1/32 এর ক্ষেত্রেও এটি সত্য যা 0.5x2⁻⁴ হিসাবে সঞ্চিত ⁻⁴
বব স্টেইন

16

যদি আপনি পাইথন ৩.৪ বা তার বেশি হয় তবে এটিতে ইতিমধ্যে কম্পিউটারে লগ 2 (এক্স) কম্পিউটিংয়ের জন্য একটি অন্তর্নির্মিত ফাংশন রয়েছে

import math
'finds log base2 of x'
answer = math.log2(x)

আপনি যদি পাইথনের পুরানো সংস্করণে থাকেন তবে আপনি এটি করতে পারেন

import math
'finds log base2 of x'
answer = math.log(x)/math.log(2)

লগ 2 উল্লেখ করা ডকসটি 3.3 সালে চালু হয়েছিল। আপনি কি নিশ্চিত করতে পারবেন যে এটি কেবল 3.4 এ রয়েছে? docs.python.org/3.3/library/math.html
জায়েদ এইপ্রিল

11

অদ্ভুত ব্যবহার:

In [1]: import numpy as np

In [2]: np.log2?
Type:           function
Base Class:     <type 'function'>
String Form:    <function log2 at 0x03049030>
Namespace:      Interactive
File:           c:\python26\lib\site-packages\numpy\lib\ufunclike.py
Definition:     np.log2(x, y=None)
Docstring:
    Return the base 2 logarithm of the input array, element-wise.

Parameters
----------
x : array_like
  Input array.
y : array_like
  Optional output array with the same shape as `x`.

Returns
-------
y : ndarray
  The logarithm to the base 2 of `x` element-wise.
  NaNs are returned where `x` is negative.

See Also
--------
log, log1p, log10

Examples
--------
>>> np.log2([-1, 2, 4])
array([ NaN,   1.,   2.])

In [3]: np.log2(8)
Out[3]: 3.0

7

http://en.wikipedia.org/wiki/Binary_logarithm

def lg(x, tol=1e-13):
  res = 0.0

  # Integer part
  while x<1:
    res -= 1
    x *= 2
  while x>=2:
    res += 1
    x /= 2

  # Fractional part
  fp = 1.0
  while fp>=tol:
    fp /= 2
    x *= x
    if x >= 2:
        x /= 2
        res += fp

  return res

একটি অ্যালগরিদমের অতিরিক্ত পয়েন্ট যা মান (গণিত.লগ (x, 2)) এর মত নয়, সর্বদা সঠিক পূর্ণসংখ্যার অংশটি দিতে অভিযোজিত হতে পারে
ব্যবহারকারী 12861

6
>>> def log2( x ):
...     return math.log( x ) / math.log( 2 )
... 
>>> log2( 2 )
1.0
>>> log2( 4 )
2.0
>>> log2( 8 )
3.0
>>> log2( 2.4 )
1.2630344058337937
>>> 

এটি math.logফাংশনে অন্তর্নির্মিত । আনতুবুর উত্তর দেখুন।
tgray



2

অজগর 3 বা ততোধিক ক্ষেত্রে, গণিত শ্রেণিতে পতিত ক্রিয়াকলাপ রয়েছে

import math

math.log2(x)
math.log10(x)
math.log1p(x)

অথবা আপনি সাধারণত যে math.log(x, base)কোনও বেসের জন্য ব্যবহার করতে পারেন।



0

লগটি [বেস এ] x = লগ [বেস বি] এক্স / লগ [বেস বি] এ ভুলে যাবেন না

সুতরাং আপনার যদি কেবল log(প্রাকৃতিক লগের জন্য) এবং log10(বেস -10 লগের জন্য) থাকে তবে আপনি ব্যবহার করতে পারেন

myLog2Answer = log10(myInput) / log10(2)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.