小编Yux*_*ang的帖子

如何在Python中使for循环金字塔更简洁?

在固体力学中,我经常使用Python并编写如下所示的代码:

for i in range(3):
    for j in range(3):
        for k in range(3):
            for l in range(3):
                # do stuff
Run Code Online (Sandbox Code Playgroud)

我经常这样做,我开始怀疑是否有更简洁的方法来做到这一点.当前代码的缺点是:如果我遵守PEP8,那么我不能超过每行79个字符的限制,并且没有太多的空间,特别是如果这又是一个类的功能.

python performance python-2.7 python-3.x

62
推荐指数
4
解决办法
3758
查看次数

IPython笔记本保存位置

我刚开始使用IPython Notebook,我尝试使用"保存"来保存我的进度.但是,不是将*.ipynb保存在我当前的工作目录中,而是保存在我的python/Scripts文件夹中.有没有办法设置这个?

谢谢!

python ipython ipython-notebook

56
推荐指数
3
解决办法
9万
查看次数

在matplotlib中共享轴仅用于部分子图

我有一个很大的情节,我发起了:

import numpy as np
import matplotlib.pyplot as plt

fig, axs = plt.subplots(5, 4)
Run Code Online (Sandbox Code Playgroud)

我想在第1列和第2列之间进行共享x轴; 并在第3列和第4列之间执行相同操作.但是,第1列和第2列不与第3列和第4列共享同一轴.

我想知道这会有无论如何要做到这一点,而不是sharex=Truesharey=True所有数字?

PS:本教程没有太多帮助,因为它只是在每行/每列内共享x/y; 他们不能在不同的行/列之间进行轴共享(除非在所有轴上共享它们).

python matplotlib scipy

30
推荐指数
3
解决办法
9327
查看次数

与Matlab相比,Numpy加载csv TOO变慢

我发布了这个问题,因为我想知道我是否做了一些非常错误的结果.

我有一个中等大小的csv文件,我试图使用numpy加载它.为了说明,我使用python制作了文件:

import timeit
import numpy as np

my_data = np.random.rand(1500000, 3)*10
np.savetxt('./test.csv', my_data, delimiter=',', fmt='%.2f')
Run Code Online (Sandbox Code Playgroud)

然后,我尝试了两种方法:numpy.genfromtxt,numpy.loadtxt

setup_stmt = 'import numpy as np'
stmt1 = """\
my_data = np.genfromtxt('./test.csv', delimiter=',')
"""
stmt2 = """\
my_data = np.loadtxt('./test.csv', delimiter=',')
"""

t1 = timeit.timeit(stmt=stmt1, setup=setup_stmt, number=3)
t2 = timeit.timeit(stmt=stmt2, setup=setup_stmt, number=3)
Run Code Online (Sandbox Code Playgroud)

结果显示t1 = 32.159652940464184,t2 = 52.00093725634724.
但是,当我尝试使用matlab时:

tic
for i = 1:3
    my_data = dlmread('./test.csv');
end
toc
Run Code Online (Sandbox Code Playgroud)

结果显示:经过的时间是3.196465秒.

我知道加载速度可能会有一些差异,但是:

  1. 这远远超出我的预期;
  2. 是不是np.loadtxt应该比np.genfromtxt更快?
  3. 我还没有尝试过python csv模块,因为加载csv文件是我经常做的事情,并且使用csv模块,编码有点冗长......但是我很乐意尝试它,如果这是唯一的方法.目前我更担心的是我做错了什么.

任何输入将不胜感激.非常感谢提前!

python csv matlab numpy

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

在 vscode 中的 task.json 中为 WSL 设置环境变量

我尝试为将在 Windows 子系统 Linux 中运行的 Visual Studio Code 任务设置环境变量。然而,它似乎不起作用。这是我的tasks.json:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "test env",
            "type": "shell",
            "command": "echo",
            "args": [
                "$test"
            ],
            "options": {
                "env": {
                    "test": "test_string"
                }
            }

        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

输出是:

> Executing task in folder ex12-test: echo $test <



Terminal will be reused by tasks, press any key to close it.
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下 shell 已手动修改为C:\WINDOWS\SysNative\bash.exeWSL,如此处此处建议。

visual-studio-code windows-subsystem-for-linux vscode-tasks

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

使用python和matplotlib获取boxplot中使用的值

我可以从数据中绘制一个箱线图:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(100)
plt.boxplot(data)
Run Code Online (Sandbox Code Playgroud)

然后,盒子将从第25百分位到第75百分位,并且晶须将从最小值到最大值(第25百分位--1.5*IQR,第75百分位数+ 1.5*IQR)之间,其中IQR表示四分位数范围.(当然,值1.5是可定制的).

现在我想知道箱线图中使用的值,即中位数,上下四分位数,上晶须终点和下晶须终点.虽然通过使用np.median()和np.percentile()很容易获得前三个,但是胡须的终点将需要一些冗长的编码:

median = np.median(data)
upper_quartile = np.percentile(data, 75)
lower_quartile = np.percentile(data, 25)

iqr = upper_quartile - lower_quartile
upper_whisker = data[data<=upper_quartile+1.5*iqr].max()
lower_whisker = data[data>=lower_quartile-1.5*iqr].min()
Run Code Online (Sandbox Code Playgroud)

我想知道,虽然这是可以接受的,但是有更简洁的方法吗?似乎值已准备好从箱线图中拉出,因为它已经绘制好了.

谢谢!

python numpy matplotlib scipy

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

在matplotlib中指定图例框架的线宽

在matplotlib中,如何指定图例框的线宽和颜色?

python matplotlib

14
推荐指数
2
解决办法
8423
查看次数

用两条线切割一个多边形的多边形

我试图shapely.geometry.Polygon用两条线将一个实例分成两部分.例如,在下面的代码,polygon是一个环,如果我们用削减它line1line2我们应该得到两个局部环,一个W/270度和一个与90度.会有一个干净的方法吗?

谢谢!

肖恩

from shapely.geometry import Point, LineString, Polygon

polygon = Point(0, 0).buffer(2).difference(Point(0, 0).buffer(1))
line1 = LineString([(0, 0), (3, 3)])
line2 = LineString([(0, 0), (3, -3)])
Run Code Online (Sandbox Code Playgroud)

python shapely

14
推荐指数
3
解决办法
4188
查看次数

仅从当前模块从python调用pytest

我知道如果我这样做,py.test可以测试一个模块:

py.test mod1.py
Run Code Online (Sandbox Code Playgroud)

或者,我可以在python中调用pytest:

import pytest
pytest.run(['mod1.py'])
Run Code Online (Sandbox Code Playgroud)

我可以在python中执行它,让它运行当前模块吗?我想我能做到:

import pytest
import os
pytest.main([os.path.basename(__file__)])
Run Code Online (Sandbox Code Playgroud)

但是想知道这是否是最"pythonic"的方式.谢谢!

python pytest

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

使用include_path作为cythonize中的关键字的Cython编译错误

我有一个名为'test.pyx'的代码段:

import numpy as np
cimport numpy as np

print(np.arange(10))
Run Code Online (Sandbox Code Playgroud)

然后我写了两个setup.py来编译它们.第一个工作正常:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np

extensions = [
    Extension('test', ['test.pyx'], include_dirs = [np.get_include()]),
    ]

setup(
    ext_modules = cythonize(extensions)
    )
Run Code Online (Sandbox Code Playgroud)

而这个不起作用(这也来自http://docs.cython.org/src/reference/compilation.html上的一个例子):

from distutils.core import setup
from Cython.Build import cythonize
import numpy as np


setup(
    ext_modules = cythonize('./test.pyx', include_path=[np.get_include()])
    )
Run Code Online (Sandbox Code Playgroud)

它说:./ test.c(346):致命错误C1083:无法打开包含文件:'numpy/arrayobject.h':没有这样的文件或目录.

我在Windows 64位上使用Python 3.3 64位,使用WinSDK 7.1.

python cython

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