小编Mac*_*cer的帖子

如何在matplotlib中绘制"双向宽度线"

如何使用matplotlib或pyqtgraph绘制如下图: 两个dirrections宽度线

线AB是双向街道,绿色部分表示从A点到B点的方向,红色部分表示B到A,每个部分的宽度表示交通量.宽度以磅为单位测量,不会在不同的缩放级别或dpi设置下更改.

这只是一个例子,事实上我有很多街道.这种情节在许多交通软件中很常见.我尝试使用matplotlib的patheffect,但结果令人沮丧:

from matplotlib import pyplot as plt
import matplotlib.patheffects as path_effects

x=[0,1,2,3]
y=[1,0,0,-1]
ab_width=20
ba_width=30

fig, axes= plt.subplots(1,1)
center_line, = axes.plot(x,y,color='k',linewidth=2)

center_line.set_path_effects(
[path_effects.SimpleLineShadow(offset=(0, -ab_width/2),shadow_color='g', alpha=1, linewidth=ab_width),
path_effects.SimpleLineShadow(offset=(0, ba_width/2), shadow_color='r', alpha=1, linewidth=ba_width),
path_effects.SimpleLineShadow(offset=(0, -ab_width), shadow_color='k', alpha=1, linewidth=2),
path_effects.SimpleLineShadow(offset=(0, ba_width), shadow_color='k', alpha=1, linewidth=2),
path_effects.Normal()])

axes.set_xlim(-1,4)
axes.set_ylim(-1.5,1.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想到的一个想法是将线的每个部分作为独立线,并在更改缩放级别时重新计算它的位置,但它太复杂和缓慢.

如果有任何简单的方法使用matplotlib或pyqtgraph绘制我想要的东西?任何建议将不胜感激!

python data-visualization matplotlib pyqtgraph

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

重用现有的 numpy 数组还是创建一个新数组?

在迭代算法中,多次使用大型 numpy 数组是很常见的。我想将值填充到现有的大 numpy 数组中,但我发现创建一个新数组甚至更快。

\n\n
>>>import numpy as np\n>>>a=np.arange(10000)\n>>>b=a.copy()\n>>>%timeit b=a+a   # Every time create a new array\n100000 loops, best of 3: 9.59 \xc2\xb5s per loop\n>>>%timeit b[:]=a+a  # Use existing array\n100000 loops, best of 3: 13.3 \xc2\xb5s per loop\n>>>%timeit np.copyto(b,a+a)  # Another way to use existing array\n100000 loops, best of 3: 13.4 \xc2\xb5s per loop\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 有没有更快的方法来重用现有的数组?(例如b上面)
  • \n
  • 如果没有这样的方法,为什么创建一个新数组会更快?
  • \n
  • 每次重新创建一个新数组有什么缺点吗?我对此犹豫不决,因为我的数据很大,我需要在每次迭代中为其分配不同的值。
  • \n
\n

python performance numpy

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

Python __setitem__使用多个键时的奇怪之处

我不想在使用时测试钥匙的类型__setitem__.但奇怪的是,当使用多个密钥时,我发现某些代码被省略了.这是我的测试类:

class foo():
    def __init__(self):
        self.data=[[1,2],[3,4],[5,6]]

    def __getitem__(self, key):
        return self.data[key]

    def __setitem__(self, key, value):
        print('Key is {0}, type of key is {1}'.format(key,type(key)))
        self.data[key] = value

f = foo()
Run Code Online (Sandbox Code Playgroud)

使用一把钥匙就可以了:

>>>f[1] = [0,0]
   Key is 1, type of key is <class 'int'>
>>>f[1]
   [0, 0]
Run Code Online (Sandbox Code Playgroud)

当使用两个键时,结果是正确的,但为什么没有打印出来

>>>f[1][1] = 100

>>>f[1][1]
   100
Run Code Online (Sandbox Code Playgroud)

我是python的新手,任何建议都会赞赏!

python class magic-methods

4
推荐指数
2
解决办法
604
查看次数