小编Nyp*_*yps的帖子

Matplotlib从图中删除所有补丁

我试图在图像流的顶部绘制各种矩形。在显示下一个图像之前,应再次删除所有以前的矩形。

通过这个问题,我找到了第一个可能的解决方案。下面是我目前正在做的简化示例。

fig, ax = plt.subplots(1)
im = ax.imshow(np.zeros((800, 800, 3)))

for i in range(100):
    img = plt.imread('my_image_%03d.png' % i)
    im.set_data(img)

    rect_lst = getListOfRandomRects(n='random', dim=img.shape[0:2])
    patch_lst = [patches.Rectangle((r[0], r[1]), r[2], r[3],
                                   linewidth=1, facecolor='none')
                 for r in rect_lst]
    [ax.add_patch(p) for p in patch_lst]
    plt.pause(0.1)
    plt.draw()
    [p.remove() for p in patch_lst]
Run Code Online (Sandbox Code Playgroud)

我对此不满意的是,我必须跟踪patch_lst以便再次删除它们。我宁愿简单地删除所有补丁并获得如下信息:

for i in range(100):
    [...]

    rect_lst = getListOfRandomRects(n='random', dim=img.shape[0:2])
    [ax.add_patch(patches.Rectangle((r[0], r[1]), r[2], r[3],
                                    linewidth=1, facecolor='none'))
                 for r in rect_lst]

    plt.pause(0.1)
    plt.draw()
    ax.clear_all_patches()       # <-- this is …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

3
推荐指数
1
解决办法
2029
查看次数

从生成器函数中检索所有迭代器值

假设我有一个生成函数,它产生两个值:

def gen_func():
    for i in range(5):
        yield i, i**2
Run Code Online (Sandbox Code Playgroud)

我想检索我的函数的所有迭代器值.目前我为此目的使用此代码段:

x1, x2 = [], []
for a, b in gen_func():
    x1.append(a)
    x2.append(b)
Run Code Online (Sandbox Code Playgroud)

这对我有用,但看起来有点笨重.是否有更紧凑的编码方式?我想的是:

x1, x2 = map(list, zip(*(a, b for a, b in gen_func())))
Run Code Online (Sandbox Code Playgroud)

但是,这只会给我一个语法错误.

PS:我知道我可能不应该为此目的使用发电机,但我需要其他地方.

编辑:任何类型的x1x2将工作,但是,我更喜欢列表我的情况.

python iterator generator

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

Python中的列表与Matlab中的向量和矩阵

来自Matlab我甚至无法想到奇异的数据点/变量.我处理的任何东西都是矩阵/数组.经过一周的搜索和错误的试验和错误,我意识到,我绝对不会在(普通)Python中得到处理矩阵的概念.

我建立

In[]: A = [[1,2,3], [9,8,7], [5,5,5]]
In[]: A
Out[]: [[1, 2, 3], [9, 8, 7], [5, 5, 5]]
Run Code Online (Sandbox Code Playgroud)

试图沿着两个维度提取矩阵中的向量:

In[]: A[:][1]
Out[]: [9, 8, 7]
In[]: A[1][:]
Out[]: [9, 8, 7]
Run Code Online (Sandbox Code Playgroud)

'令人惊讶'给出了相同的!无法获得特定的列(当然,除了逐个迭代).

因此,我无法管理将矩阵A与另一个向量合并,即用另一列扩展A. Matlab风格的方法显然很奇怪:

In[]: B = A, [4,6,8]
In[]: B
Out[]: ([[1, 2, 3], [9, 8, 7], [5, 5, 5]], [4, 6, 8])
Run Code Online (Sandbox Code Playgroud)

结果是嵌套的东西,而不是A的扩展.相同的

B = [A, [4,6,8]]
Run Code Online (Sandbox Code Playgroud)

好的,更像Python:

A.append([11,12,13])
Run Code Online (Sandbox Code Playgroud)

这很容易添加一行.但有没有类似的方法来添加一个列?

(令人沮丧的是,Python doc提供了各种奇特的例子,但显然这些都集中在为一维列表演示'pythonic'解决方案.)

python matlab matrix

0
推荐指数
1
解决办法
299
查看次数

标签 统计

python ×3

generator ×1

iterator ×1

matlab ×1

matplotlib ×1

matrix ×1