我在matplotlib中有一个极轴,其文本延伸到轴的范围之外.我想删除轴的边框 - 或将其设置为背景的颜色,以便文本更清晰.我怎样才能做到这一点?
简单地增加轴的大小是不可接受的解决方案(因为该图可嵌入GUI中,如果完成则变得太小).将背景颜色更改为黑色以使边框不可见也不是可接受的解决方案.

省略了绘制事物的各个部分的大量代码,但这里是图形和轴本身的生成:
import pylab as pl
fig = pl.figure(figsize=(5,5), facecolor='white')
axes = pl.subplot(111, polar=True, axisbg='white')
pl.xticks([])
pl.yticks([])
pl.ylim(0,10)
# ... draw lots of things
Run Code Online (Sandbox Code Playgroud) 以下语法无效:
if extremely_long_condition_that_takes_up_a_whole_line and
another_condition:
#do something
Run Code Online (Sandbox Code Playgroud)
以下内容有效:
if (extremely_long_condition and
another_condition):
#do something
Run Code Online (Sandbox Code Playgroud)
为什么这些不同?更一般地说,为什么#2没问题,但#1有点危险/含糊不清?我看不出第一个陈述是如何或概括为含糊不清的陈述.
类似的问题已经被问到了,但他们有更具体的限制,他们的答案不适用于我的问题。
一般来说,确定任意 numpy 数组是否是另一个数组的子集的最 Pythonic 方法是什么?更具体地说,我有一个大约 20000x3 的数组,我需要知道完全包含在集合中的 1x3 元素的索引。更一般地说,是否有一种更Pythonic的方式来编写以下内容:
master = [12, 155, 179, 234, 670, 981, 1054, 1209, 1526, 1667, 1853] # some indices of interest
triangles = np.random.randint(2000, size=(20000, 3)) # some data
for i, x in enumerate(triangles):
if x[0] in master and x[1] in master and x[2] in master:
print i
Run Code Online (Sandbox Code Playgroud)
对于我的用例,我可以安全地假设 len(master) << 20000。(因此,也可以安全地假设 master 已排序,因为这很便宜)。
我没有在SO上找到这个答案,所以我在这里分享:
问题:当有多个排序键时,如何在matlab中模拟sortrows功能?在matlab中,这看起来像是:
sortrows(x,[3,-4])
Run Code Online (Sandbox Code Playgroud)
首先按第3列排序,然后按第2列排序.
如果按一列排序,可以使用np.argsort查找该列的索引,并应用这些索引.但是你如何为多列做到这一点?
我发现scipy.linalg.eig有时会产生不一致的结果.但不是每一次.
>>> import numpy as np
>>> import scipy.linalg as lin
>>> modmat=np.random.random((150,150))
>>> modmat=modmat+modmat.T # the data i am interested in is described by real symmetric matrices
>>> d,v=lin.eig(modmat)
>>> dx=d.copy()
>>> vx=v.copy()
>>> d,v=lin.eig(modmat)
>>> np.all(d==dx)
False
>>> np.all(v==vx)
False
>>> e,w=lin.eigh(modmat)
>>> ex=e.copy()
>>> wx=w.copy()
>>> e,w=lin.eigh(modmat)
>>> np.all(e==ex)
True
>>> e,w=lin.eigh(modmat)
>>> np.all(e==ex)
False
Run Code Online (Sandbox Code Playgroud)
虽然我不是最好的线性代数向导,但我确实理解特征分解固有地受到奇怪的舍入误差的影响,但我不明白为什么重复计算会导致不同的值.但我的结果和可重复性是不同的.
问题的本质究竟是什么 - 好吧,有时结果是可以接受的,有时它们不是.这里有些例子:
>>> d[1]
(9.8986888573772465+0j)
>>> dx[1]
(9.8986888573772092+0j)
Run Code Online (Sandbox Code Playgroud)
上面的差异~3e-13看起来并不是什么大不了的事.相反,真正的问题(至少对于我目前的项目而言)是某些特征值似乎无法在正确的符号上达成一致.
>>> np.all(np.sign(d)==np.sign(dx))
False
>>> np.nonzero(np.sign(d)!=np.sign(dx))
(array([ 38, 39, 40, 41, 42, …Run Code Online (Sandbox Code Playgroud) 为了很好地处理类别变量,matlab的dummyvar函数最具pythonic等价物是什么?
这是一个说明我的问题的例子,其中NxM矩阵表示将N个数据点划分为<= N个类别的M种不同方式.
>> partitions
array([[1, 1, 2, 2, 1, 2, 2, 2, 1, 1],
[1, 2, 2, 1, 2, 1, 2, 2, 2, 1],
[1, 1, 1, 2, 2, 2, 1, 3, 3, 2]])
Run Code Online (Sandbox Code Playgroud)
任务是有效地计算任意两个数据点被分类到相同类别的次数并将结果存储在N×N矩阵中.在matlab中,这可以作为带有dummyvar的单行来完成,它为每个分区的每个类别创建一个列变量.
>> dummyvar(partitions)*dummyvar(partitions)'
ans =
3 2 1 1 1 1 1 0 1 2
2 3 2 0 2 0 2 1 2 1
1 2 3 1 1 1 3 2 1 0
1 0 1 3 1 3 1 1 0 2 …Run Code Online (Sandbox Code Playgroud) 有没有办法from X import Y as Z在多行导入中使用成语?
具体来说,我想写类似的东西from some.very.long.package.name import LongName as OtherLongName.整件事不适合一行.
所以我试着用括号来编写它来交叉线,但我发现as关键字有一些奇怪的行为.特别:
#this is just fine
from os import (
path)
#this is a syntax error
from os import (
path) as os_path
Run Code Online (Sandbox Code Playgroud)
因此,我想出去做我想要的唯一方法是:
from some.very.long.package.name import (
LongName)
OtherLongName = LongName
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个声明中做到这一点?
我有一个带有多个顶点的 mayavi 对象,我想直接为这些顶点设置 RGB 或 RGBA 值,而不是将自己限制为带有标量的单个颜色图。如何做到这一点?