我有一个rgb值列表,并希望从列表中创建一个costum色彩映射表.
这些是示例值:
my_rgbs =['#ece804','#ece804','#e8e804','#e4e804','#e4e804','#e0e804','#dce804','#dce804','#d8e804','#d4e404','#d4e404','#d0e404','#cce404','#cce404','#c8e404','#c4e404','#c4e404','#c0e404','#bce404','#bce404','#b8e404','#b4e004','#b4e004','#b0e004','#ace004','#ace004','#a8e004','#a4e004','#a4e008','#a0e008','#9ce008','#9ce008','#98dc08','#94dc08','#94dc08','#90dc08','#8cdc08','#8cdc08','#88dc08','#84dc08','#84dc08','#80dc08','#7cdc08','#7cdc08','#78d808','#74d808','#70d808','#70d808','#6cd808','#68d808','#68d808','#64d808','#60d808','#60d808','#5cd808','#58d408','#58d408','#54d408','#50d408','#50d40c','#4cd40c','#48d40c','#48d40c','#44d40c','#40d40c','#40d40c','#3cd40c','#38d00c','#38d00c','#34d00c','#30d00c','#30d00c','#2cd00c','#28d00c','#28d00c','#24d00c','#20d00c','#20d00c','#1ccc0c','#18cc0c','#18cc0c','#14cc0c','#10cc0c','#10cc0c','#0ccc0c','#08cc0c','#08cc0c','#04cc0c','#00cc0c','#00cc0c','#08c81c','#10c428','#18c034','#20bc40','#28bc4c','#30b858','#38b464','#40b070','#48b07c','#44b878','#40bc78','#3cc074','#38c474','#34cc74','#30d070','#2cd470','#28d870','#24d474','#24d478','#20d47c','#20d07c','#1cd080','#1cd084','#1ccc88','#18cc88','#18cc8c','#14c890','#14c890','#14c894','#10c498','#10c49c','#0cc49c','#0cc0a0','#0cc0a4','#08c0a8','#08bca8','#04bcac','#04bcb0','#04bcb0','#08b4ac','#0caca8','#0ca4a8','#109ca4','#1094a4','#148ca0','#1484a0','#187c9c','#18749c','#1c6c98','#1c6498','#205c94','#205494','#244c90','#244490','#283c8c','#28348c','#2c2c88','#2c2888','#302484','#302484','#302480','#302480','#302480','#30247c','#30247c','#30247c','#302478','#302478','#302074','#302074','#302074','#302070','#302070','#302070','#34206c','#34206c','#342068','#342068','#342068','#341c64','#341c64','#341c64','#341c60','#341c60','#341c60','#341c5c','#341c5c','#341c58','#341c58','#341858','#341854','#381854','#381854','#381850','#381850','#38184c','#38184c','#38184c','#381848','#381848','#381448','#381444','#381444','#381444','#381440','#381440','#38143c','#38143c','#3c143c','#3c1438','#3c1038','#3c1038','#3c1034','#3c1034','#3c1030','#3c1030','#3c1030','#3c102c','#3c102c','#3c102c','#3c1028','#3c0c28','#3c0c28','#3c0c24','#3c0c24','#400c20','#400c20','#400c20','#400c1c','#400c1c','#400c1c','#400818','#400818','#400814','#400814','#400814','#400810','#400810','#400810','#40080c','#40080c','#40080c','#440c10','#441010','#441010','#441410','#441414','#481814','#481814','#481c14','#481c18','#482018','#4c2018','#4c2418','#4c241c','#4c281c','#4c2c1c','#502c1c','#503020','#503020','#503420','#503420','#543824','#543824','#543c24','#543c24']
Run Code Online (Sandbox Code Playgroud)
我知道创建costum色彩映射的唯一方法是从这里:http://matplotlib.org/examples/pylab_examples/custom_cmap.html
例如:
from pylab import *
r1 = 255. / 255.
g1 = 255. / 255.
b1 = 210. / 255.
r2 = 15. / 255.
g2 = 50. / 255.
b2 = 0. / 255.
cdict = {'red': ((0, r1, r1),
(1, r2, r2)),
'green': ((0, g1, g1),
(1, g2, g2)),
'blue': ((0, b1, b1),
(1, b2, b2))}
my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
Run Code Online (Sandbox Code Playgroud)
这种方法非常不方便将每个单独的rgb值转换为单独的r,g和b值,然后转换为这样的字典.我想知道这个问题是否存在更简单的解决方案?非常感谢你!
我有一个日期时间对象列表,并希望找到在特定时间范围内的对象:
import datetime
dates = [ datetime.datetime(2007, 1, 2, 0, 1),
datetime.datetime(2007, 1, 3, 0, 2),
datetime.datetime(2007, 1, 4, 0, 3),
datetime.datetime(2007, 1, 5, 0, 4),
datetime.datetime(2007, 1, 6, 0, 5),
datetime.datetime(2007, 1, 7, 0, 6) ]
#in reality this is a list of over 25000 dates
mask = (dates>datetime.datetime(2007,1,3)) & \
(dates<datetime.datetime(2007,1,6))
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下错误:"TypeError:无法将datetime.datetime与列表进行比较"
我该如何修复我的代码?
我发现了几十个如何在Python/NumPy中对for循环进行矢量化的例子.不幸的是,我不知道如何使用矢量化形式减少简单for循环的计算时间.在这种情况下甚至可能吗?
time = np.zeros(185000)
lat1 = np.array(([48.78,47.45],[38.56,39.53],...)) # ~ 200000 rows
lat2 = np.array(([7.78,5.45],[7.56,5.53],...)) # same number of rows as time
for ii in np.arange(len(time)):
pos = np.argwhere( (lat1[:,0]==lat2[ii,0]) and \
(lat1[:,1]==lat2[ii,1]) )
if pos.size:
pos = int(pos)
time[ii] = dtime[pos]
Run Code Online (Sandbox Code Playgroud) 我有几个Python/Numpy程序,当它们使用太多内存时,往往会导致PC冻结/运行速度非常慢.当它用于大量内存(例如3.8/4GB)时,我甚至无法停止脚本或移动光标.因此,我想在达到内存使用的关键限制(例如3GB)时自动退出程序.
我找不到解决方案了.是否有Pythonic方法来解决这个问题,因为我在Windows和Linux机器上运行我的脚本.
我是Pandas时间序列和数据框架的新手,并且很难完成这个简单的任务.我从2004年1月1日到2008年12月31日每天都有一个数据集"数据"(1维float32-Numpy数组).日期存储为日期时间对象"日期"列表.基本上,我想计算一个完整的"标准年" - 所有年份每天的平均值(1-365).(?)我从这个类似的问题开始(获取一定的时间平均超过在熊猫数据帧几年平日),但无法得到期望的结果-一个时间序列的365"平均"的日子,例如平均1月1日的所有四个,1月2日的...
一个小例子脚本:
import numpy as np
import pandas as pd
import datetime
startdate = datetime.datetime(2004, 1, 1)
enddate = datetime.datetime(2008, 1, 1)
days = (enddate + datetime.timedelta(days=1) - startdate).days
data = np.random.random(days)
dates = [startdate + datetime.timedelta(days=x) for x in range(0, days)]
ts = pd.Series(data, dates)
test = ts.groupby(lambda x: (x.year, x.day)).mean()
Run Code Online (Sandbox Code Playgroud) 我获得了几个月的数据,但在几个月之间缺失了.如果我将整个数据集绘制在一个绘图中(其间有很多空白空间),这看起来很奇怪.我写了一个小例子脚本来展示它是如何工作的(基于:Python/Matplotlib - 有没有办法制作一个不连续的轴?)
问题:我无法让x轴使用相同的日期格式!ax或ax2都是正确的,但从来都不是.你有什么主意吗?
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
def getDates(startdate, enddate):
days = (enddate + datetime.timedelta(days=1) - startdate).days
dates = [ startdate + datetime.timedelta(days=x) for x in range(0,days) ]
return dates
dates1 = getDates(datetime.datetime(2013,1,1), datetime.datetime(2013,1,31))
dates2 = getDates(datetime.datetime(2013,3,1), datetime.datetime(2013,3,31))
dates = dates1+dates2
data = np.arange(len(dates))
Locator = mpl.dates.DayLocator(interval=5)
Formatter = mpl.dates.DateFormatter('%d-%m-%y')
fig,(ax,ax2) = plt.subplots(1,2,sharey=True)
fig.subplots_adjust(wspace=0.05)
fig.set_size_inches(10,3)
ax.plot(dates, data)
ax2.plot(dates, data)
ax.legend(loc=1)
ax.set_ylim( 0, 61 )
ax.set_xlim( datetime.datetime(2013,1,1), datetime.datetime(2013,1,31) …Run Code Online (Sandbox Code Playgroud) 我有一个 3d Numpy 数组,想在考虑其他两个维度的某些元素的情况下取一个轴上的平均值。
这是描述我的问题的示例代码:
import numpy as np
myarray = np.random.random((5,10,30))
yy = [1,2,3,4]
xx = [20,21,22,23,24,25,26,27,28,29]
mymean = [ np.mean(myarray[t,yy,xx]) for t in np.arange(5) ]
Run Code Online (Sandbox Code Playgroud)
然而,这会导致:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Run Code Online (Sandbox Code Playgroud)
为什么像 myarray[:,[1,2,3,4],[1,2,3,4]] 这样的索引可以工作,但我上面的代码却不起作用?
我仍处于开始了解 Cython 工作原理的阶段。这个片段显示了我的程序中缓慢的部分之一,我想知道这个 for 循环是否可以改进。它看起来仍然很像原始的 Numpy 版本,但我添加了 cdef 和 int 转换。
cdef Py_ssize_t i, j
cdef double ii, jj
for ii in np.arange(startx, endx+1, 0.1):
for jj in np.arange(starty, endy+1, 0.1):
if my_condition(ii, jj):
i = <int>ii
j = <int>jj
data[i, j] += 1
Run Code Online (Sandbox Code Playgroud)
你有什么建议?
我正在使用许多python包,如numpy,bottleneck,h5py,...用于我在计算机上的日常工作.由于我是这台机器上的root用户,因此安装这些软件包没有问题.但是,我想在我只有普通用户帐户的服务器机器上使用不同软件包的"环境".所以我考虑在我的机器上创建一个虚拟环境(使用virtualenv),在那里安装所有需要的软件包.然后我只是将整个文件夹复制到服务器并可以运行它的所有内容?
我的机器使用Fedora 19,而服务器使用Ubuntu.这是一个问题吗?我找不到有关如何将这样的虚拟环境移动到另一个系统的任何信息.我想首先在我的机器上创建虚拟环境的原因是服务器上缺少很多工具,比如python-dev,所以我不能编译numpy.
我查看了Anaconda和Enthought Python发行版,但它们没有包含我需要的几个包.此外,这个问题应该有一个完全"开放"的方式吗?
将虚拟环境移动到服务器失败,因为我在导入软件包时抱怨丢失了一些文件.这可能不奇怪......
我有4个角坐标(四边形)的数千个多边形,并希望将它们转换为光栅表示为numpy 2d数组.存在许多网格化算法,如流行的扫描线填充图形.(见http://www.cs.rit.edu/~icss571/filling/how_to.html或http://cs.uvm.edu/~rsnapp/teaching/cs274/lectures/scanlinefill.pdf)
Octave在poly2mask函数中实现了这一点(例如http://octave.sourceforge.net/image/function/poly2mask.html).
Numpy也有类似的功能吗?我仍然没有得到这个算法如何详细工作,因此,如果你能给我一些关于如何有效地在Python/Numpy中实现它的提示,我将非常感激.
或者为了速度原因,在CPython(我也不熟悉)中对它进行编码会更好吗?
python ×10
numpy ×8
matplotlib ×2
cython ×1
datetime ×1
pandas ×1
scipy ×1
time-series ×1
virtualenv ×1