小编scr*_*rpy的帖子

在Matplotlib中从预先计数的数据绘制直方图

我想使用Matplotlib在已经预先计数的数据上绘制直方图.例如,假设我有原始数据

data = [1, 2, 2, 3, 4, 5, 5, 5, 5, 6, 10]
Run Code Online (Sandbox Code Playgroud)

鉴于这些数据,我可以使用

pylab.hist(data, bins=[...])
Run Code Online (Sandbox Code Playgroud)

绘制直方图.

就我而言,数据已被预先计算并表示为字典:

counted_data = {1: 1, 2: 2, 3: 1, 4: 1, 5: 4, 6: 1, 10: 1}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将这个预先计数的数据传递给直方图函数,让我可以控制箱宽,绘图范围等,就好像我已经将原始数据传递给它一样.作为一种解决方法,我将我的计数扩展到原始数据:

data = list(chain.from_iterable(repeat(value, count)
            for (value, count) in counted_data.iteritems()))
Run Code Online (Sandbox Code Playgroud)

counted_data包含数百万个数据点的计数时,这是低效的.

是否有更简单的方法使用Matplotlib从我预先计算的数据中生成直方图?

或者,如果最简单的条形图是预先装箱的数据,是否有一种方便的方法可以将我的每件商品计数"汇总"为分箱数量?

python matplotlib histogram

31
推荐指数
3
解决办法
2万
查看次数

VSCode ModuleNotFoundError:没有名为 X 的模块

我正在尝试构建一个新包,但是,当我尝试从 VSCode 内部或终端运行任何文件时,我遇到了以下错误:

ModuleNotFoundError: No module name 'x'
Run Code Online (Sandbox Code Playgroud)

我当前的文件夹结构如下:

package
|---module
|------__init__.py
|------calculations.py
|------miscfuncs.py
|---tests
|------__init__.py
|------test_calcs.py
|---setup.py
|---requirements.txt
Run Code Online (Sandbox Code Playgroud)

但是,当我通过 VSCode 并在 test_calcs.py 中使用import module.calculations as calc或运行测试(PyTest)时from module.calculations import Class,测试按预期工作 - 这让我感到困惑。

我知道这是一个常见问题,但我无法找出适用于此的解决方案。

我尝试使用下面的代码检查工作目录是否在系统路径中。返回的目录列表中的第一项是我正在使用的目录。

import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)

我还在文件中使用了以下内容但无济于事:

import module.calculations 
import .module.calculations
from . import miscfuncs
Run Code Online (Sandbox Code Playgroud)

尝试时import .module.calculations,我得到以下信息:

ModuleNotFoundError: No module named '__main__.module'; '__main__' is not a package
Run Code Online (Sandbox Code Playgroud)

当尝试from . import miscfuncs在calculations.py中时,我收到以下错误:

ImportError: cannot import name 'miscfuncs'
Run Code Online (Sandbox Code Playgroud)

当处理模块文件夹中的文件时,我可以使用相对导入:import calculations并且它工作得很好。这对于模块内的文件来说很好,但当我在 test_calcs.py …

python visual-studio-code

29
推荐指数
3
解决办法
8万
查看次数

使用pytube下载mp3格式的视频

我一直在使用 pytube 在 python 中下载 youtube 视频。到目前为止,我已经能够以 mp4 格式下载。

yt = pytube.YouTube("https://www.youtube.com/watch?v=WH7xsW5Os10")

vids= yt.streams.all()
for i in range(len(vids)):
    print(i,'. ',vids[i])

vnum = int(input("Enter vid num: "))
vids[vnum].download(r"C:\YTDownloads")
print('done')
Run Code Online (Sandbox Code Playgroud)

我设法下载了“音频”版本,但它是.mp4格式的。我确实尝试将扩展名重命名为.mp3,并播放了音频,但应用程序(Windows Media Player)停止响应并开始滞后。

如何直接以音频文件.mp3格式下载视频?请提供一些代码,因为我是使用此模块的新手。

audio file-format youtube-api python-3.x pytube

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

将句子保存为服务器文件名

我将一组句子的录音保存到相应的一组音频文件中.

句子包括:

Ich weiß es nicht!
¡No lo sé! 
Ég veit ekki!
Run Code Online (Sandbox Code Playgroud)

您如何建议我将句子转换为人类可读的文件名,稍后将在在线服务器上提供.我现在不确定将来可能会处理哪些语言.

更新:

请注意,两句话不能相互冲突.例如:

É bär icke dej.
E bår icke dej.
Run Code Online (Sandbox Code Playgroud)

无法解析为相同的文件名,因为这些将相互覆盖.这是这里提到的slugify函数的问题:将字符串转换为有效的文件名?

我想出的最好的是使用urllib.parse.quote.但是我认为最终的输出比我希望的更难阅读.有什么建议?:

Ich%20wei%C3%9F%20es%20nicht%21
%C2%A1No%20lo%20s%C3%A9%21
%C3%89g%20veit%20ekki%21
Run Code Online (Sandbox Code Playgroud)

python filenames sanitize python-3.x

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

Numpy中的向量化字符串操作:为什么它们比较慢?

这是那些“出于纯粹的好奇心而提出的(可能徒劳的希望我会学到一些东西)”的问题。

我正在研究在大量字符串上节省内存的方法,在某些情况下,在numpy中执行字符串操作似乎很有用。但是,我得到了一些令人惊讶的结果:

import random
import string

milstr = [''.join(random.choices(string.ascii_letters, k=10)) for _ in range(1000000)]

npmstr = np.array(milstr, dtype=np.dtype(np.unicode_, 1000000))
Run Code Online (Sandbox Code Playgroud)

使用的内存消耗memory_profiler

%memit [x.upper() for x in milstr]
peak memory: 420.96 MiB, increment: 61.02 MiB

%memit np.core.defchararray.upper(npmstr)
peak memory: 391.48 MiB, increment: 31.52 MiB
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好; 但是,计时结果令我惊讶:

%timeit [x.upper() for x in milstr]
129 ms ± 926 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit np.core.defchararray.upper(npmstr)
373 ms ± 2.36 ms …
Run Code Online (Sandbox Code Playgroud)

python benchmarking numpy

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