Làm cách nào để tính nhật ký cho cơ sở hai trong python. Ví dụ. Tôi có phương trình này trong đó tôi đang sử dụng log cơ số 2
import math
e = -(t/T)* math.log((t/T)[, 2])
Làm cách nào để tính nhật ký cho cơ sở hai trong python. Ví dụ. Tôi có phương trình này trong đó tôi đang sử dụng log cơ số 2
import math
e = -(t/T)* math.log((t/T)[, 2])
Câu trả lời:
Thật tốt khi biết điều đó
nhưng cũng biết rằng
math.log
có một đối số thứ hai tùy chọn cho phép bạn chỉ định cơ sở:
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
base
đối số được thêm trong phiên bản 2.3, btw.
?
) là xem xét đối tượng động .
math.log2(x)
import math
log2 = math.log(x, 2.0)
log2 = math.log2(x) # python 3.4 or later
math.frexp(x)
Nếu tất cả những gì bạn cần là phần nguyên của log cơ số 2 của một số dấu phẩy động, thì việc trích xuất số mũ là khá hiệu quả:
log2int_slow = int(math.floor(math.log(x, 2.0)))
log2int_fast = math.frexp(x)[1] - 1
Python frexp () gọi hàm C frexp () , hàm này chỉ lấy và điều chỉnh số mũ.
Python frexp () trả về một tuple (phần định trị, số mũ). Vì vậy, [1]
nhận được phần số mũ.
Đối với lũy thừa tích phân của 2, số mũ lớn hơn bạn có thể mong đợi. Ví dụ 32 được lưu trữ dưới dạng 0,5x2⁶. Điều này giải thích - 1
ở trên. Cũng hoạt động cho 1/32 được lưu trữ dưới dạng 0,5x2⁻⁴.
Tầng hướng tới âm vô cùng, do đó log₂31 là 4 không phải 5. log₂ (1/17) là -5 không phải -4.
x.bit_length()
Nếu cả đầu vào và đầu ra đều là số nguyên, thì phương thức số nguyên gốc này có thể rất hiệu quả:
log2int_faster = x.bit_length() - 1
- 1
vì 2ⁿ yêu cầu n + 1 bit. Hoạt động cho các số nguyên rất lớn, ví dụ 2**10000
.
Tầng hướng tới âm vô cùng, do đó log₂31 là 4 không phải 5. log₂ (1/17) là -5 không phải -4.
Nếu bạn đang sử dụng python 3.4 trở lên thì nó đã có một chức năng tích hợp để tính toán log2 (x)
import math
'finds log base2 of x'
answer = math.log2(x)
Nếu bạn đang sử dụng phiên bản python cũ hơn thì bạn có thể làm như thế này
import math
'finds log base2 of x'
answer = math.log(x)/math.log(2)
Sử dụng numpy:
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
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
Thử cái này ,
import math
print(math.log(8,2)) # math.log(number,base)
Trong python 3 trở lên, lớp toán có các hàm dự phòng
import math
math.log2(x)
math.log10(x)
math.log1p(x)
hoặc bạn thường có thể sử dụng math.log(x, base)
cho bất kỳ cơ sở nào bạn muốn.
log_base_2 (x) = log (x) / log (2)
Đừng quên rằng log [cơ sở A] x = log [cơ sở B] x / log [cơ sở B] Một .
Vì vậy, nếu bạn chỉ có log
(đối với nhật ký tự nhiên) và log10
(đối với nhật ký cơ sở 10), bạn có thể sử dụng
myLog2Answer = log10(myInput) / log10(2)
math.log()
cuộc gọi. Bạn đã thử chưa?