我试图在图像流的顶部绘制各种矩形。在显示下一个图像之前,应再次删除所有以前的矩形。
通过这个问题,我找到了第一个可能的解决方案。下面是我目前正在做的简化示例。
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) 假设我有一个生成函数,它产生两个值:
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:我知道我可能不应该为此目的使用发电机,但我需要其他地方.
编辑:任何类型的x1和x2将工作,但是,我更喜欢列表我的情况.
来自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'解决方案.)