在固体力学中,我经常使用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个字符的限制,并且没有太多的空间,特别是如果这又是一个类的功能.
我刚开始使用IPython Notebook,我尝试使用"保存"来保存我的进度.但是,不是将*.ipynb保存在我当前的工作目录中,而是保存在我的python/Scripts文件夹中.有没有办法设置这个?
谢谢!
我有一个很大的情节,我发起了:
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=True和sharey=True所有数字?
PS:本教程没有太多帮助,因为它只是在每行/每列内共享x/y; 他们不能在不同的行/列之间进行轴共享(除非在所有轴上共享它们).
我发布了这个问题,因为我想知道我是否做了一些非常错误的结果.
我有一个中等大小的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秒.
我知道加载速度可能会有一些差异,但是:
任何输入将不胜感激.非常感谢提前!
我尝试为将在 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,如此处和此处的建议。
我可以从数据中绘制一个箱线图:
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)
我想知道,虽然这是可以接受的,但是有更简洁的方法吗?似乎值已准备好从箱线图中拉出,因为它已经绘制好了.
谢谢!
我试图shapely.geometry.Polygon用两条线将一个实例分成两部分.例如,在下面的代码,polygon是一个环,如果我们用削减它line1和line2我们应该得到两个局部环,一个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) 我知道如果我这样做,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"的方式.谢谢!
我有一个名为'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 ×9
matplotlib ×3
numpy ×2
scipy ×2
csv ×1
cython ×1
ipython ×1
matlab ×1
performance ×1
pytest ×1
python-2.7 ×1
python-3.x ×1
shapely ×1
vscode-tasks ×1