我有一个简单的问题,但无法找到一个好的解决方案.
我想拍摄一个代表灰度图像的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
更新:
我找到了一个基于这个问题的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) 在我的领域中,将一些数字对齐,一起操作它们并取结果的平方根是很常见的.例如,这在毕达哥拉斯定理和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是不可读的.但我想问的是:
"有没有任何计算理由更喜欢前两种替代品而不是第三种替代品?"
谢谢阅读!
我想将我创建的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) 我开始摆弄PyQt,并从pyqt白皮书示例应用程序(pastebin)制作了一个"漂亮"的脚本
它在Windows和Linux中完美运行(两者都安装了qt环境).
现在我的问题是:因为我正在尝试使用Qt,因为它是经过编译的(至少是纯旧的基于C++的Qt),我如何编译一些.exe文件在Windows上运行它,或者用于Linux的独立可执行文件.
关键是我希望编译程序,因为速度和可移植性,而不是从源解释,这需要在任何机器上进行先前的设置.例如,其中一个目标是通过电子邮件将小gui脚本发送给根本不是程序员的同事.
我遇到了我认为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]].
谁能向我解释为什么会出现这种情况?
我发现了类似的问题,但在Linux/Bash中没有
我希望我的脚本创建一个具有给定名称的文件(通过用户输入),但如果filename已经存在,则在末尾添加数字.
例:
$ create somefile
Created "somefile.ext"
$ create somefile
Created "somefile-2.ext"
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种实现这一目标的有效方法,我认为这是一种类似切片的操作:
>>> 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个,依此类推.
我认为如果可能的话我不应该使用循环,因为使用切片的原因是(我猜)在单个操作中有效地进行"提取".
谢谢阅读.
有一位荷兰艺术家/工程师创造了一个非常精致的步行机制.工作原理可以在这里看到:
http://www.strandbeest.com/beests_leg.php
奇怪的是,他使用自制的进化算法来计算理想的链接长度,这在页面底部有描述.
我创建了一个Python脚本来可视化地分析循环的地面接触部分,它必须满足两个必要条件:
这两个标准将产生"轮状"效应,机器在线性前进而不浪费动能.
问题是:
"你是否有任何关于优化腿长度的简单进化迭代公式的建议(通过在下面的代码中插入正确的突变),以便根据上述两个标准改善步行路径?"
编辑:关于基因组候选人的"拟合规则"的一些建议:
这是我在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
我有一个宠物项目来创建地图图像,在那里我绘制道路和其他东西在地形高程的等高线图上.它旨在计划山地自行车路线(过去我手工制作了一些矢量图,它们非常适合可视化).
目前,我从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(更改源代码)来修改创建这些较轻线的方式,类似于此处提出的方法:
此外,如果有人知道如何以更优雅的方式生成这样的地图,使用其他库,我会非常感谢这个提示!
谢谢阅读.
python ×9
list ×2
math ×2
matplotlib ×2
bash ×1
compilation ×1
contour ×1
executable ×1
filenames ×1
geometry ×1
json ×1
linux ×1
numpy ×1
performance ×1
pyqt4 ×1
qt4 ×1
scipy ×1
slice ×1
sqlite ×1
terrain ×1