在我的代码中,我采用两个数据系列的对数并绘制它们.我想通过将其提高到e的幂(自然对数的反对数)来改变x轴的每个刻度值.
换一种说法.我想绘制两个系列的对数图,但是在水平上有x轴.

这是我正在使用的代码.
from pylab import scatter
import pylab
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
file_name = '/Users/joedanger/Desktop/Python/scatter_python.csv'
data = DataFrame(pd.read_csv(file_name))
y = np.log(data['o_value'], dtype='float64')
x = np.log(data['time_diff_day'], dtype='float64')
fig = plt.figure()
plt.scatter(x, y, c='blue', alpha=0.05, edgecolors='none')
fig.suptitle('test title', fontsize=20)
plt.xlabel('time_diff_day', fontsize=18)
plt.ylabel('o_value', fontsize=16)
plt.xticks([-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4])
plt.grid(True)
pylab.show()
Run Code Online (Sandbox Code Playgroud) 我需要获取包含对数概率的两个NumPy矩阵(或其他2d数组)的矩阵乘积.np.log(np.dot(np.exp(a), np.exp(b)))出于显而易见的原因,天真的方式不是优选的.
运用
from scipy.misc import logsumexp
res = np.zeros((a.shape[0], b.shape[1]))
for n in range(b.shape[1]):
# broadcast b[:,n] over rows of a, sum columns
res[:, n] = logsumexp(a + b[:, n].T, axis=1)
Run Code Online (Sandbox Code Playgroud)
工作但运行速度比慢100倍 np.log(np.dot(np.exp(a), np.exp(b)))
运用
logsumexp((tile(a, (b.shape[1],1)) + repeat(b.T, a.shape[0], axis=0)).reshape(b.shape[1],a.shape[0],a.shape[1]), 2).T
Run Code Online (Sandbox Code Playgroud)
或者其他瓦片和重塑的组合也起作用,但是比上面的循环运行得更慢,因为实际大小的输入矩阵需要非常大量的存储器.
我目前正在考虑在C中编写一个NumPy扩展来计算它,但当然我宁愿避免这种情况.是否有既定的方法来执行此操作,或者是否有人知道执行此计算的内存密集程度较低的方法?
编辑: 感谢larsmans提供此解决方案(参见下面的推导):
def logdot(a, b):
max_a, max_b = np.max(a), np.max(b)
exp_a, exp_b = a - max_a, b - max_b
np.exp(exp_a, out=exp_a)
np.exp(exp_b, out=exp_b)
c = np.dot(exp_a, exp_b)
np.log(c, out=c)
c += max_a + …Run Code Online (Sandbox Code Playgroud) 当文章/问题表明算法的Big O运行时间是O(LogN)时.
例如,Quicksort的运行时间为O(LogN),其中它是Log base 10,但二叉树的高度为O(LogN + 1),其中它是Log base 2
题
1)我感到困惑的是它是Log base 10还是Log base 2,因为不同的文章使用不同的对数作为对数.
2)如果它的Log base 2或Log base 10 ??它会有所不同吗?
3)当我们看到O(LogN)时,我们可以假设它是指Log base 10吗?
我正在查看条目在O(lg(N))操作中查找N位整数的日志基数2,并使用Bit Twiddling hacks 进行乘法和查找.
我可以很容易地看到该条目中的第二个算法是如何工作的
static const int MultiplyDeBruijnBitPosition2[32] =
{
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
r = MultiplyDeBruijnBitPosition2[(uint32_t)(v * 0x077CB531U) >> 27];
Run Code Online (Sandbox Code Playgroud)
计算n = log2 v在哪里v知道2的幂.在这种情况下0x077CB531是一个普通的De Bruijn序列,其余的是显而易见的.
但是,该条目中的第一个算法
static const int MultiplyDeBruijnBitPosition[32] =
{
0, 9, 1, 10, 13, 21, 2, …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个可以获取值的Java程序,并将它们放入涉及日志库10的公式中.
如何在Java中计算log 10?
我需要以某种精度来评估任何基数的对数,无关紧要.有算法吗?我用Java编程,所以我对Java代码很好.
如何快速找到二进制对数?(O(1)充其量)也许能够回答我的问题,但我不明白.它可以澄清吗?
逻辑回归的成本函数是
cost(h(theta)X,Y) = -log(h(theta)X) or -log(1-h(theta)X)
Run Code Online (Sandbox Code Playgroud)
我的问题是将对数表达式用于成本函数的基础是什么.它来自何处?我相信你不能只是把"-log"放在一边.如果有人能解释成本函数的推导,我将不胜感激.谢谢.
我O(log* N)在一本关于数据结构的书中遇到过这个术语.什么log*意思?我无法在Google上找到它,WolframAlpha 也不理解它.
我有一个BigInteger数字,例如超过2 64.现在我想计算该BigInteger数字的对数,但该方法BigInteger.log()不存在.如何计算我的大BigInteger值的(自然)对数?
logarithm ×10
algorithm ×4
java ×3
math ×3
big-o ×2
python ×2
biginteger ×1
matplotlib ×1
matrix ×1
numpy ×1