python 需要将 "linspace"转换成更多的 "logarithmic"

标签 python numpy

请原谅,我的数学一直很差,现在正尝试通过编码来学习一些 Python(以及一些数学)。

我有这个:

import numpy as np
import matplotlib.pyplot as plt

whole = 1 # percentage: 1 = 100%, 0.1 = 10% ecc 
nparts = 10 # how many "steps" we want to use
origin = 100 # starting value we

ranged = origin * whole # defining the percentage of our starting value

values = np.linspace(origin - ranged/2, origin + ranged/2, nparts * 2)

r = []
g = []
for v in values:
    if v > origin:
        r.append(v)
        #reds = f"{v} is {100*(v - origin)/origin}% of {origin}"
        #print(reds)

    else:
        g.append(v)
        #greens = f"{v} is {100*(v - origin)/origin}% of {origin}"
        #print(greens)
        
        
print("reds")
print(r)
print("greens")
print(g)

最后这些 print(g) and print(r)输出数值结果。

如果我绘制它,您可以清楚地看到它的作用。

axes = plt.gca()

#origin BLUE 
plt.axhline(y=origin, color='b', linestyle='-')

#reds
for i in r:
        plt.axhline(y=i, color='r', linestyle='-')
#greens
for i in g:
        plt.axhline(y=i, color='g', linestyle='-')

plot

所以你可以看到给定一个 origin (蓝线)并给出 +/- 百分比 whole它创建 n 行 ( nparts ) 和 reds if they are > origingreen if < origin线性传播它们 values = np.linspace(origin - ranged/2, origin + ranged/2, nparts * 2) 关于这个whole来自 origin 的百分比值

现在我的问题是:我怎样才能以对数方式展开这些线(别误会我的意思,我的数学很差,我什至不知道我要找的东西是否与对数相关) 我想实现这样的目标(我对绘制的图像进行了 Photoshop)。 我真的很想保留那个 whole也许能够添加一个新的 variable “控制”这种对数扩散

基本上我需要找到一种方法来找到另一个函数来替换 values = np.linspace(origin - ranged/2, origin + ranged/2, nparts * 2)以达到下面所附的预期结果。 我尝试了 np.geomspace 和 np.logspace 都没有成功,也许我只是不好或者我需要找到另一种方法来做到这一点。

期望的结果: desired result

你能帮我解决这个问题吗? 非常感谢。

最佳答案

您可以将任何 linspace 传递给 np.log。这将给出每个点的对数。要获得特定范围内的结果,您可以使用线性变换:除以最大值并乘以所需范围,或者添加一个基线值。

例如:

values = np.log(np.linspace(1, 10, nparts))

r = 150 - 50 * (values / values[-1])
g =  50 + 50 * (values / values[-1])

这将导致以下情节:

logplot

如果您需要包含 originwhole 变量,这是一种方法:

values = np.log(np.linspace(1, 10, nparts))
half_range = origin * whole / 2

g = origin + half_range * (1 - values / values[-1])
r = origin * 2 - g

关于python 需要将 "linspace"转换成更多的 "logarithmic",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67557856/

相关文章:

python - Bootstrap 3 在 Django 模板中使用每行显示 3 篇博客文章

javascript - 带有类的 momentJs 无法正常工作 django

python - 配置 django ec2 实例以使用 virtualenv

python - python数组中None之间的第一个和最后一个数字

python - 将元组列表转换为系列的最快方法

python - 使用 glob 后如何将数据框合并到一个 csv 文件中?

基于Python正则表达式的分割

python 到 cython - 消除 python 调用

python - 提高加权移动平均过滤函数的运行时间?

python - 哪些语言具有与 Numpy 相似或等效的数组切片符号,为什么它不更常见?