小编joe*_*lom的帖子

是否可以在IPython/JuPyter笔记本中显示OpenCV视频?

当从OpenCV视频处理python教程运行示例时,它们都会弹出一个专用窗口.我知道IPython笔记本可以显示来自磁盘和YouTube的视频,所以我想知道是否有办法将OpenCV视频播放引导到Notebook浏览器并让它在输出单元中播放而不是单独的窗口(最好不保存它)到磁盘,然后从那里播放).

以下是OpenCV教程中的代码.

import cv2

cap = cv2.VideoCapture('/path/to/video') 

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

video opencv ipython ipython-notebook jupyter

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

将数千个图像读入一个大的numpy数组的最快方法

我正在尝试找到一种最快的方法来从目录中读取一堆图像到一个numpy数组.我的最终目标是计算所有这些图像中像素的最大值,最小值和第n百分位数等统计数据.当所有图像中的像素都在一个大的numpy数组中时,这是直截了当的,因为我可以使用内置的数组方法,如.max.min,以及np.percentile函数.

下面是一些具有25个tiff图像(512x512像素)的示例时序.这些基准测试来自%%timit于jupyter-notebook中的使用.差异太小,不足以对25张图片产生任何实际影响,但我打算将来阅读数千张图片.

# Imports
import os
import skimage.io as io
import numpy as np
Run Code Online (Sandbox Code Playgroud)
  1. 附加到列表

    %%timeit
    imgs = []    
    img_path = '/path/to/imgs/'
    for img in os.listdir(img_path):    
        imgs.append(io.imread(os.path.join(img_path, img)))    
    ## 32.2 ms ± 355 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用字典

    %%timeit    
    imgs = {}    
    img_path = '/path/to/imgs/'    
    for img in os.listdir(img_path):    
        imgs[num] = io.imread(os.path.join(img_path, img))    
    ## 33.3 ms ± 402 ms per loop (mean ± …
    Run Code Online (Sandbox Code Playgroud)

python performance numpy image

19
推荐指数
2
解决办法
1万
查看次数

是否有用于临时更改matplotlib设置的上下文管理器?

pandas和中seaborn,可以使用with关键字临时更改显示/绘图选项,该关键字仅将指定的设置应用于缩进代码,同时保持全局设置不变:

print(pd.get_option("display.max_rows"))

with pd.option_context("display.max_rows",10):
    print(pd.get_option("display.max_rows"))

print(pd.get_option("display.max_rows"))
Run Code Online (Sandbox Code Playgroud)

日期:

60
10
60
Run Code Online (Sandbox Code Playgroud)

当我同样尝试with mpl.rcdefaults():或者with mpl.rc('lines', linewidth=2, color='r'):,我收到AttributeError: __exit__.

有没有办法临时更改matplotlib中的rcParams,以便它们只适用于选定的代码子集,还是我必须手动来回切换?

python matplotlib pandas seaborn

13
推荐指数
2
解决办法
1559
查看次数

用于交互式绘图的 Plotly express 与 Altair/Vega-Lite

最近我正在学习Plotly expressAltair/Vega-Lite进行交互式绘图。他们两个都令人印象深刻,我想知道他们的优点和缺点是什么。特别是对于创建交互式情节,它们之间有什么大的区别,什么时候比另一个更合适?

python plotly vega-lite altair

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

使用`pandas.cut()`,如何获得整数二进制数并避免获得负下限?

我的数据帧为零,为最低值.我试图使用precisioninclude_lowest参数pandas.cut(),但我不能得到间隔由整数组成而不是浮点数与一个小数.我也不能让最左边的间隔停在零.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style='white', font_scale=1.3)

df = pd.DataFrame(range(0,389,8)[:-1], columns=['value'])
df['binned_df_pd'] = pd.cut(df.value, bins=7, precision=0, include_lowest=True)
sns.pointplot(x='binned_df_pd', y='value', data=df)
plt.xticks(rotation=30, ha='right')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我已经尝试设置precision为-1,0和1,但它们都输出一个十进制浮点数.在pandas.cut()帮助没有提及的是,X-min和X-MAX值扩展与X系列的0.1%,但我想,也许include_lowest能在某种程度上抑制这种行为.我目前的解决方法涉及导入numpy:

import numpy as np

bin_counts, edges = np.histogram(df.value, bins=7)
edges = [int(x) for x in edges]
df['binned_df_np'] = pd.cut(df.value, bins=edges, include_lowest=True)

sns.pointplot(x='binned_df_np', y='value', data=df)
plt.xticks(rotation=30, ha='right')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有没有办法在pandas.cut()不使用numpy的情况下直接获得非负整数作为区间边界?

编辑:我刚注意到指定right=False使最低间隔移到0而不是-0.4.它似乎优先于include_lowest,因为改变后者并没有任何明显的效果right=False.仍然使用一个小数点指定以下间隔.

在此输入图像描述

python intervals bins pandas

10
推荐指数
2
解决办法
4637
查看次数

matplotlib子图的行标题

在matplotlib中,除了整个图的标题集和每个单独的图的标题集之外,是否可以为每行子图设置一个单独的标题?这将对应于下图中的橙色文本. 在此输入图像描述

如果没有,你会如何解决这个问题?在左侧创建一个单独的空子图列,并用橙色文本填充它们?

我知道可以使用text()或手动定位每个单独的标题annotate(),但这通常需要大量的调整,我有很多子图.有更顺畅的解决方案吗?

python matplotlib subplot

8
推荐指数
4
解决办法
1万
查看次数

与最后一个索引相比,numpy数组的访问时间受到最后一个索引的影响更大

这是对我之前的问题的回答的后续跟进将数千个图像读入一个大的numpy数组的最快方法.

第2.3章"ndarray的内存分配"中,Travis Oliphant写了以下关于如何在内存中访问C-ordered numpy数组的索引.

...按顺序移动计算机内存,最后一个索引首先递增,然后是倒数第二个索引,依此类推.

这可以通过对两个第一个或最后两个索引的二维数组的访问时间进行基准测试来确认(对于我的目的,这是加载500个大小为512x512像素的图像的模拟):

import numpy as np

N = 512
n = 500
a = np.random.randint(0,255,(N,N))

def last_and_second_last():
    '''Store along the two last indexes'''
    imgs = np.empty((n,N,N), dtype='uint16')
    for num in range(n):
        imgs[num,:,:] = a
    return imgs

def second_and_third_last():
    '''Store along the two first indexes'''
    imgs = np.empty((N,N,n), dtype='uint16')
    for num in range(n):
        imgs[:,:,num] = a
    return imgs
Run Code Online (Sandbox Code Playgroud)

基准

In [2]: %timeit last_and_second_last()
136 ms ± 2.18 ms per loop (mean …
Run Code Online (Sandbox Code Playgroud)

python memory arrays performance numpy

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

在pandas中使用多个系列绘制条形图上的误差线

我可以在单个系列条形图上绘制误差条,如下所示:

import pandas as pd
df = pd.DataFrame([[4,6,1,3], [5,7,5,2]], columns = ['mean1', 'mean2', 'std1', 'std2'], index=['A', 'B'])
print(df)
     mean1  mean2  std1  std2
A      4      6     1     3
B      5      7     5     2

df['mean1'].plot(kind='bar', yerr=df['std1'], alpha = 0.5,error_kw=dict(ecolor='k'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正如预期的那样,索引A的平均值与同一索引的标准偏差配对,误差条显示该值的+/-.

但是,当我尝试在同一个图中同时绘制'mean1'和'mean2'时,我不能以相同的方式使用标准偏差:

df[['mean1', 'mean2']].plot(kind='bar', yerr=df[['std1', 'std2']], alpha = 0.5,error_kw=dict(ecolor='k'))

    Traceback (most recent call last):

  File "<ipython-input-587-23614d88a3c5>", line 1, in <module>
    df[['mean1', 'mean2']].plot(kind='bar', yerr=df[['std1', 'std2']], alpha = 0.5,error_kw=dict(ecolor='k'))

  File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", line 1705, in plot_frame
    plot_obj.generate()

  File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", line 878, in generate
    self._make_plot()

  File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib pandas

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

如何安装不在conda存储库中的R-packages?

我正在使用Anaconda来管理我的R-installation.它适用于Anaconda提供的R-channel中可用的软件包,但我在安装Anaconda repos中未包含的软件包时遇到了麻烦.

我尝试了几种不同的方法,下面列出了它们的错误输出.

1. install.packages('rafalib')

建议在这里工作conda - 如何安装"R-essentials"中没有的R包?.我的.libPaths()观点'/home/user/anaconda2/lib/R/library'.

日期:

--- Please select a CRAN mirror for use in this session ---
Error in download.file(url, destfile = f, quiet = TRUE) : 
  unsupported URL scheme
Error: .onLoad failed in loadNamespace() for 'tcltk', details:
  call: fun(libname, pkgname)
  error: Can't find a usable init.tcl in the following directories: 
    /opt/anaconda1anaconda2anaconda3/lib/tcl8.5 ./lib/tcl8.5 ./lib/tcl8.5 ./library ./library ./tcl8.5.18/library ./tcl8.5.18/library

This probably means that Tcl wasn't installed properly.
Run Code Online (Sandbox Code Playgroud)

tcl从conda频道安装r-old …

r ncurses readline anaconda conda

7
推荐指数
2
解决办法
6612
查看次数

相关矩阵图与一侧的系数,另一侧的散点图和对角线上的分布

我喜欢PerformanceAnalyticsR包的chart.Correlation功能中的这个相关矩阵:

PerformanceAnalytics chart.Correlation结果

我怎样才能在Python中创建它?我见过的相关矩阵图主要是热图,例如这个seaborn例子.

python pandas seaborn

7
推荐指数
2
解决办法
4661
查看次数