我正在制作一个看起来像这样的散点图:

(问题底部的MWE)
从上图中可以看出,图例中点的颜色自动设置为蓝色matplotlib.我需要将这些点设置为颜色图中不存在的其他颜色(即:黑色),这样它们就不会与与所述颜色图相关联的颜色产生混淆.
我环顾四周,但matplotlib.legend模块似乎不接受color关键字.有没有办法做到这一点?
这是MWE:
import matplotlib.pyplot as plt
import numpy as np
def rand_data():
return np.random.uniform(low=0., high=1., size=(100,))
# Generate data.
x, y, x2, x3 = [rand_data() for i in range(4)]
# This data defines the markes and labels used.
x1 = np.random.random_integers(7, 9, size=(100,))
# Order all lists so smaller points are on top.
order = np.argsort(-np.array(x2))
# Order x and y.
x_o, y_o = np.take(x, order), np.take(y, order)
# Order list …Run Code Online (Sandbox Code Playgroud) 我有一个大约60000个形状的日期集(每个角的纬度/经度坐标),我想用matplotlib和底图在地图上绘制.
这就是我现在这样做的方式:
for ii in range(len(data)):
lons = np.array([data['lon1'][ii],data['lon3'][ii],data['lon4'][ii],data['lon2'][ii]],'f2')
lats = np.array([data['lat1'][ii],data['lat3'][ii],data['lat4'][ii],data['lat2'][ii]],'f2')
x,y = m(lons,lats)
poly = Polygon(zip(x,y),facecolor=colorval[ii],edgecolor='none')
plt.gca().add_patch(poly)
Run Code Online (Sandbox Code Playgroud)
但是,我的机器需要大约1.5分钟,我在想是否有可能加快速度.有没有更有效的方法来绘制多边形并将它们添加到地图中?
我必须像这样挑选一个对象数组:
import cPickle as pickle
from numpy import sin, cos, array
tmp = lambda x: sin(x)+cos(x)
test = array([[tmp,tmp],[tmp,tmp]],dtype=object)
pickle.dump( test, open('test.lambda','w') )
Run Code Online (Sandbox Code Playgroud)
它会出现以下错误:
TypeError: can't pickle function objects
Run Code Online (Sandbox Code Playgroud)
有办法吗?
我试图找出在python中找到稀疏对称和实矩阵行列式的最快方法.使用scipy sparse模块,但真的很惊讶没有行列式功能.我知道我可以使用LU分解来计算行列式,但是没有看到一个简单的方法来执行它,因为返回scipy.sparse.linalg.splu是一个对象并且实例化一个密集的L和U矩阵是不值得的 - 我不妨sp.linalg.det(A.todense())在哪里做A我的scipy稀疏矩阵.
我也有点惊讶为什么其他人没有面对scipy中有效决定因素计算的问题.如何使用splu计算行列式?
我看着pySparse和scikits.sparse.chlmod.后者对我来说现在不实用 - 需要软件包安装,也不确定在我遇到麻烦之前代码的速度有多快.有解决方案吗 提前致谢.
是否有任何算法可以从一组3D数据点返回直线方程?我可以找到很多来源,这些来源将给出2D数据集中的线的等式,但没有3D.
谢谢.
我有周期T的周期函数,想知道如何获得傅立叶系数列表.我尝试从numpy 使用fft模块,但它似乎更专注于傅立叶变换而不是系列.也许它缺乏数学知识,但我看不出如何从fft计算傅里叶系数.
帮助和/或示例表示赞赏.
如果k是任意形状的numpy数组,那么k.shape = (s1, s2, s3, ..., sn),我想重塑它以便k.shape变成(s1, s2, ..., sn, 1),这是在一行中执行它的最佳方法吗?
k.reshape(*(list(k.shape) + [1])
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的列表:
a = [['a string', [0, 0, 0], [22, 'bee sting']], ['see string',
[0, 2, 0], [22, 'd string']]]
Run Code Online (Sandbox Code Playgroud)
并且在保存和检索它时遇到问题.
我可以使用泡菜保存它:
with open('afile','w') as f:
pickle.dump(a,f)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试加载它时会出现以下错误:
pickle.load('afile')
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
pickle.load('afile')
File "C:\Python27\lib\pickle.py", line 1378, in load
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 841, in __init__
self.readline = file.readline
AttributeError: 'str' object has no attribute 'readline'
Run Code Online (Sandbox Code Playgroud)
我以为我可以转换为numpy数组并使用save,savez或者savetxt.但是我收到以下错误:
>>> np.array([a])
Traceback (most recent call last):
File "<pyshell#122>", …Run Code Online (Sandbox Code Playgroud) NumPy有三元运算符吗?例如,在R中有一个矢量化if-else函数:
> ifelse(1:10 < 3,"a","b")
[1] "a" "a" "b" "b" "b" "b" "b" "b" "b" "b"
Run Code Online (Sandbox Code Playgroud)
NumPy中有什么相同的东西吗?
我遇到了一个我似乎无法理解的记忆问题.
我在Windows 7 64位机器上运行8GB内存并运行32位python程序.
这些程序读取了5,118个压缩的numpy文件(npz).Windows报告磁盘上的文件占用1.98 GB
每个npz文件包含两个数据:'arr_0'的类型为np.float32,'arr_1'的类型为np.uint8
python脚本读取每个文件将其数据附加到两个列表中,然后关闭该文件.
在文件4284/5118周围,程序抛出一个MemoryException
但是,任务管理器说发生错误时python.exe*32的内存使用量是1,854,848K~ = 1.8GB.远低于我的8 GB限制,或者假定的32位程序的4GB限制.
在程序中我捕获内存错误并报告:每个列表的长度为4285.第一个列表包含总共1,928,588,480个float32的〜= 229.9 MB的数据.第二个列表包含12,342,966,272 uint8的〜= 1,471.3MB数据.
所以,一切似乎都在检查.除了我得到内存错误的部分.我绝对有更多的内存,它崩溃的文件大约是800KB,因此读取一个巨大的文件并没有失败.
此外,该文件未损坏.如果我事先没有耗尽所有的记忆,我可以读得很好.
为了让事情变得更加混乱,所有这一切似乎在我的Linux机器上运行良好(虽然它确实有16GB的内存,而不是我的Windows机器上的8GB),但是,它似乎并不是机器的RAM.造成这个问题.
为什么Python会抛出内存错误,当我预计它应该能够分配另外2GB的数据?