小编hel*_*ker的帖子

如何使用matplotlib色彩映射将Numpy数组转换为PIL图像

我有一个简单的问题,但无法找到一个好的解决方案.

我想拍摄一个代表灰度图像的numpy 2D数组,并在应用一些matplotlib色彩图时将其转换为RGB PIL图像.

我可以使用以下pyplot.figure.figimage命令获得合理的PNG输出:

dpi = 100.0
w, h = myarray.shape[1]/dpi, myarray.shape[0]/dpi
fig = plt.figure(figsize=(w,h), dpi=dpi)
fig.figimage(sub, cmap=cm.gist_earth)
plt.savefig('out.png')
Run Code Online (Sandbox Code Playgroud)

虽然我可以调整它以获得我想要的东西(可能使用StringIO来获取PIL图像),我想知道是否有更简单的方法来做到这一点,因为它似乎是一个非常自然的图像可视化问题.让我们说,像这样:

colored_PIL_image = magic_function(array, cmap)
Run Code Online (Sandbox Code Playgroud)

谢谢阅读!

python numpy matplotlib color-mapping python-imaging-library

108
推荐指数
3
解决办法
16万
查看次数

如何使用Scipy.signal.butter实现带通巴特沃斯滤波器

更新:

我找到了一个基于这个问题的Scipy Recipe!所以,对于任何有兴趣的人,请直接:

http://scipy-cookbook.readthedocs.io/items/ButterworthBandpass.html


我很难实现最初为一维numpy阵列(时间序列)实现Butterworth带通滤波器的简单任务.

我必须包括的参数是sample_rate,截止频率IN HERTZ和可能的顺序(其他参数,如衰减,固有频率等对我来说更加模糊,因此任何"默认"值都可以).

我现在拥有的是这个,它似乎是一个高通滤波器,但我不确定我是否做得对:

def butter_highpass(interval, sampling_rate, cutoff, order=5):
    nyq = sampling_rate * 0.5

    stopfreq = float(cutoff)
    cornerfreq = 0.4 * stopfreq  # (?)

    ws = cornerfreq/nyq
    wp = stopfreq/nyq

    # for bandpass:
    # wp = [0.2, 0.5], ws = [0.1, 0.6]

    N, wn = scipy.signal.buttord(wp, ws, 3, 16)   # (?)

    # for hardcoded order:
    # N = order

    b, a = scipy.signal.butter(N, wn, btype='high')   # should 'high' be here for bandpass?
    sf = scipy.signal.lfilter(b, a, …
Run Code Online (Sandbox Code Playgroud)

python signal-processing scipy digital-filter

73
推荐指数
3
解决办法
10万
查看次数

Python中的指数 - 我应该更喜欢**运算符而不是math.pow和math.sqrt吗?

在我的领域中,将一些数字对齐,一起操作它们并取结果的平方根是很常见的.例如,这在毕达哥拉斯定理和RMS计算中完成.

在numpy中,我做了以下事情:

result = numpy.sqrt(numpy.sum(numpy.pow(some_vector, 2)))
Run Code Online (Sandbox Code Playgroud)

在纯python中会出现这样的情况:

result = math.sqrt(math.pow(A, 2) + math.pow(B,2)) # example with two dimensions.
Run Code Online (Sandbox Code Playgroud)

但是,我一直在使用这种纯Python形式,因为我发现它更紧凑,独立于导入,看似相同:

result = (A**2 + B**2)**0.5   # two dimensions
result = (A**2 + B**2 + C**2 + D**2)**0.5
Run Code Online (Sandbox Code Playgroud)

我听说有些人认为**运算符是一种黑客攻击,并且通过对它进行取幂来对数字进行求数0.5是不可读的.但我想问的是:

"有没有任何计算理由更喜欢前两种替代品而不是第三种替代品?"

谢谢阅读!

python math exponentiation

57
推荐指数
2
解决办法
12万
查看次数

在Python中将JSON转换为SQLite - 如何正确地将json密钥映射到数据库列?

我想将我创建的JSON文件转换为SQLite数据库.

我的目的是稍后决定哪个数据容器和入口点最好,json(通过文本编辑器输入数据)或SQLite(通过类似电子表格的GUI(如SQLiteStudio)输入数据).

我的json文件是这样的(包含我所在城市某些十字路口的流量数据):

...
"2011-12-17 16:00": {
    "local": "Av. Protásio Alves; esquina Ramiro Barcelos",
    "coord": "-30.036916,-51.208093",
    "sentido": "bairro-centro",
    "veiculos": "automotores",
    "modalidade": "semaforo 50-15",
    "regime": "típico",
    "pistas": "2+c",
    "medicoes": [
        [32, 50],
        [40, 50],
        [29, 50],
        [32, 50],
        [35, 50]
        ]
    },
"2011-12-19 08:38": {
    "local": "R. Fernandes Vieira; esquina Protásio Alves",
    "coord": "-30.035535,-51.211079",
    "sentido": "único",
    "veiculos": "automotores",
    "modalidade": "semáforo 30-70",
    "regime": "típico",
    "pistas": "3",
    "medicoes": [
        [23, 30],
        [32, 30],
        [33, 30],
        [32, 30]
        ]
    }
...
Run Code Online (Sandbox Code Playgroud)

我创建了一个很好的数据库,它与这些Python代码行有一对多的关系:

import sqlite3 …
Run Code Online (Sandbox Code Playgroud)

python sqlite json database-design

46
推荐指数
1
解决办法
5万
查看次数

如何将PyQt脚本(.py)编译为Windows(.exe)和/或linux的单个独立可执行文件?

我开始摆弄PyQt,并从pyqt白皮书示例应用程序(pastebin)制作了一个"漂亮"的脚本

它在Windows和Linux中完美运行(两者都安装了qt环境).

现在我的问题是:因为我正在尝试使用Qt,因为它是经过编译的(至少是纯旧的基于C++的Qt),我如何编译一些.exe文件在Windows上运行它,或者用于Linux的独立可执行文件.

关键是我希望编译程序,因为速度和可移植性,而不是从源解释,这需要在任何机器上进行先前的设置.例如,其中一个目标是通过电子邮件将小gui脚本发送给根本不是程序员的同事.

python executable compilation qt4 pyqt4

43
推荐指数
2
解决办法
6万
查看次数

附加到Python中的2D列表

我遇到了我认为Python中的一个奇怪的行为,我希望有人在可能的情况下解释它.

我创建了一个空的2D列表

listy = [[]]*3

print listy

[[], [], []]
Run Code Online (Sandbox Code Playgroud)

以下工作正如我所料:

listy[1] = [1,2] 产量 [[], [1,2], []]

listy[1].append(3) 产量 [[], [1,2,3], []]

但是,当我附加到其中一个空列表时,python会附加到所有子列表,如下所示:

listy[2].append(1)收益率[[1], [1,2,3], [1]].

谁能向我解释为什么会出现这种情况?

python list

31
推荐指数
2
解决办法
9万
查看次数

创建新文件,但如果文件名已存在于bash中,则添加数字

我发现了类似的问题,但在Linux/Bash中没有

我希望我的脚本创建一个具有给定名称的文件(通过用户输入),但如果filename已经存在,则在末尾添加数字.

例:

$ create somefile
Created "somefile.ext"
$ create somefile
Created "somefile-2.ext"
Run Code Online (Sandbox Code Playgroud)

linux bash filenames

24
推荐指数
5
解决办法
4万
查看次数

python列表中的不连续切片

我正在寻找一种实现这一目标的有效方法,我认为这是一种类似切片的操作:

>>> mylist = range(100)
>>>magicslicer(mylist, 10, 20)
[0,1,2,3,4,5,6,7,8,9,30,31,32,33,34,35,36,37,38,39,60,61,62,63......,97,98,99]
Run Code Online (Sandbox Code Playgroud)

这个想法是:切片得到10个元素,然后跳过 20个元素,然后得到下一个10,然后跳过20个,依此类推.

我认为如果可能的话我不应该使用循环,因为使用切片的原因是(我猜)在单个操作中有效地进行"提取".

谢谢阅读.

python performance list slice

21
推荐指数
2
解决办法
3605
查看次数

Theo Jansen步行机构的进化算法

有一位荷兰艺术家/工程师创造了一个非常精致的步行机制.工作原理可以在这里看到:

http://www.strandbeest.com/beests_leg.php

奇怪的是,他使用自制的进化算法来计算理想的链接长度,这在页面底部有描述.

我创建了一个Python脚本来可视化地分析循环的地面接触部分,它必须满足两个必要条件:

  1. 尽可能直,以免上下摆动;
  2. 尽可能保持速度恒定,以免将一只脚拖到另一只脚上;

这两个标准将产生"轮状"效应,机器在线性前进而不浪费动能.

问题是:

"你是否有任何关于优化腿长度的简单进化迭代公式的建议(通过在下面的代码中插入正确的突变),以便根据上述两个标准改善步行路径?"

编辑:关于基因组候选人的"拟合规则"的一些​​建议:

  • 考虑到它对应于曲柄转动的三分之一(考虑到下部可能具有非水平斜率并且仍然是线性的),取出循环的"下部"(接地触点);
  • 对这个"地面接触"部分的点位置应用线性回归;
  • 从线性回归计算垂直变化(最小二乘?)
  • 通过平行于回归线的一个点和前一个点之间的差异来计算速度变化;
  • (可选)绘制这些"错误函数"的图表,可能允许在视觉上选择突变体(boooring ......; o).

这是我在Python + GTK中的代码,它提供了对问题的一些视觉洞察:(编辑:现在参数化的魔术数字受到mut的值的突变)

# coding: utf-8

import pygtk
pygtk.require('2.0')
import gtk, cairo
from math import *

class Mechanism():
    def __init__(s):
        pass

    def assemble(s, angle):

        # magic numbers (unmutated)
        mu = [38, 7.8, 15, 50, 41.5, 39.3, 61.9, 55.8, 40.1, 39.4, 36.7, 65.7, 49]

        # mutations
        mut = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

        # …
Run Code Online (Sandbox Code Playgroud)

python math geometry genetic-algorithm evolutionary-algorithm

19
推荐指数
1
解决办法
6159
查看次数

在pyplot.contourf上隐藏轮廓线条以仅获取填充

我有一个宠物项目来创建地图图像,在那里我绘制道路和其他东西在地形高程的等高线图上.它旨在计划山地自行车路线(过去我手工制作了一些矢量图,它们非常适合可视化).

目前,我从GeoTIFF下载数字高程模型:http: //www.ecologia.ufrgs.br/labgeo/arquivos/downloads/dados/SRTM/geotiff/rs.rar

然后使用GDAL和Matplotlib contourf函数创建绘图:

from osgeo import gdal
import matplotlib
import matplotlib.pyplot as plt
from pylab import cm
import numpy

f = 'rs.tif'

elev = gdal.Open(f)

a = elev.GetRasterBand(1).ReadAsArray()

w = elev.RasterXSize
h = elev.RasterYSize
print w, h

altura  = (0.35, 0.42)
largura = (0.70, 0.82)

a = a[int(h*altura[0]):int(h*altura[1]),
      int(w*largura[0]):int(w*largura[1])]


cont = plt.contourf(a, origin='upper', cmap=cm.gist_earth, levels=numpy.arange(0,1000,20))
plt.title('Altitudes - max: %d m; min: %d m' % (numpy.amax(a), numpy.amin(a)))
plt.show()
Run Code Online (Sandbox Code Playgroud)

这使:

在此输入图像描述

问题是轮廓线是"白色的",并产生一些视觉污染,这是不希望的,因为我想稍后绘制道路和河流.

因此,我试图contourf通过参数设置或通过hack(更改源代码)来修改创建这些较轻线的方式,类似于此处提出的方法:

如何从Matplotlib格式化轮廓线

此外,如果有人知道如何以更优雅的方式生成这样的地图,使用其他库,我会非常感谢这个提示!

谢谢阅读.

python matplotlib terrain contour

19
推荐指数
3
解决办法
9665
查看次数