我有一个3D点集合.这些点以恒定水平(z = 0,1,...,7)进行采样.图像应该清楚:
这些点是一个(N, 3)
叫做numpar形状的ndarray X
.上面的图使用以下方式创建:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X = load('points.npy')
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_wireframe(X[:,0], X[:,1], X[:,2])
ax.scatter(X[:,0], X[:,1], X[:,2])
plt.draw()
Run Code Online (Sandbox Code Playgroud)
我想改为仅对该物体的表面进行三角测量,并绘制曲面.但是,我不想要这个物体的凸包,因为这会丢失我希望能够检查的细微形状信息.
我试过了ax.plot_trisurf(X[:,0], X[:,1], X[:,2])
,但这导致了下面的混乱:
有帮助吗?
以下是生成代表问题的3D数据的代码段:
import numpy as np
X = []
for i in range(8):
t = np.linspace(0,2*np.pi,np.random.randint(30,50))
for j in range(t.shape[0]):
# random circular objects...
X.append([
(-0.05*(i-3.5)**2+1)*np.cos(t[j])+0.1*np.random.rand()-0.05,
(-0.05*(i-3.5)**2+1)*np.sin(t[j])+0.1*np.random.rand()-0.05,
i
])
X = np.array(X)
Run Code Online (Sandbox Code Playgroud)
这是原始数据的pastebin:
这是沿着常数z的切片:
我在Chrome 41中使用jQuery 2.1.我需要从输入滑块中获取值,因为它会发生变化; 但是,当我使用jquery的change事件时,我只在鼠标释放后从滑块中获取值,而不是在mousedown和drag中.
这个小例子说明了这个问题:
<input type="range" id="slider" value="0.5" min="0.0" max="1.0" step="0.01" />
<br />
<span id="slider_value">Nothing yet.</span>
<script>
$(document).on('change', '#slider', function() {
$('#slider_value').html( $(this).val() );
});
</script>
Run Code Online (Sandbox Code Playgroud)
我想我可以通过在鼠标上/下事件上设置布尔值然后获取mousemove事件的值来提出修复.有更清洁的解决方案吗?
有没有办法为matplotlib的Rectangle补丁指定边缘,以便边界在指定的域之外?例如,在photoshop中,这将被称为"笔画位置".请允许我举例说明:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
# Here's my "image"
X = np.arange(16).reshape(4,4)
# Suppose I want to highlight some feature in the middle boxes.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(X, cmap=plt.cm.gray, interpolation='nearest')
ax.add_patch( Rectangle((0.5, 0.5), 2, 2, fc='none', ec='r') )
plt.show()
Run Code Online (Sandbox Code Playgroud)
这产生以下结果:
但是,如果修改如下
ax.add_patch( Rectangle((0.5, 0.5), 2, 2, fc='none', ec='r', lw=10) )
Run Code Online (Sandbox Code Playgroud)
我得到了这个数字:
如您所见,边缘位于Rectangle对象域边界的中心位置,因此会渗入此域.是否可以强制边缘边界严格位于Rectangle域之外?
我在CentOS 6.5上从源代码构建numpy,没有root访问权限(python -V = 2.7.6).我有来自git的最新numpy源代码.我不能因为我的生活而得到numpy承认atlas libs.我有:
ls -1 /usr/lib64/atlas
libatlas.so.3
libatlas.so.3.0
libcblas.so.3
libcblas.so.3.0
libclapack.so.3
libclapack.so.3.0
libf77blas.so.3
libf77blas.so.3.0
liblapack.so.3
liblapack.so.3.0
libptcblas.so.3
libptcblas.so.3.0
libptf77blas.so.3
libptf77blas.so.3.0
Run Code Online (Sandbox Code Playgroud)
我不知道这些lib是如何产生的,但我只能假设atlas版本比我可以制作的任何标准BLAS/LAPACK版本更快.
将numpy指向这些库的正确方法是什么?我是否export ATLAS, BLAS, LAPACK=...
将每个设置为相应的路径?或者我编辑site.cfg
文件以包含以下内容:
[default]
library_dirs = /usr/lib64/atlas
[atlas]
library_dirs = /usr/lib64/atlas
atlas_libs = lapack, cblas, f77blas, atlas
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上面的每一个变体,每次运行python setup.py config
它都告诉我在我指定的路径中找不到每个库以及一堆其他默认搜索路径.我已经python setup.py config
使用site.cfg
上面的设置粘贴了运行结果,并且没有设置环境变量:http://pastebin.com/EL9CfaR7.任何帮助表示赞赏.
我正在为应用程序使用逻辑sigmoid.我比较了使用scipy.special
函数的时间expit
,而不是使用S形的双曲正切定义.
我发现双曲正切是快3倍.这里发生了什么?我还在排序的数组上测试了时间,看看结果是否有任何不同.
以下是在IPython中运行的示例:
In [1]: from scipy.special import expit
In [2]: myexpit = lambda x: 0.5*tanh(0.5*x) + 0.5
In [3]: x = randn(100000)
In [4]: allclose(expit(x), myexpit(x))
Out[4]: True
In [5]: timeit expit(x)
100 loops, best of 3: 15.2 ms per loop
In [6]: timeit myexpit(x)
100 loops, best of 3: 4.94 ms per loop
In [7]: y = sort(x)
In [8]: timeit expit(y)
100 loops, best of 3: 15.3 ms per loop
In [9]: timeit …
Run Code Online (Sandbox Code Playgroud) 使用pintpint.UnitRegistry
,如何按维度过滤单位?例如,如何获得质量类型或体积类型的所有单位?
我对scipy.interpolate.RegularGridInterpolator的文档感到有点困惑.
比方说我有一个函数f:R ^ 3 => R,它是在单位立方体的顶点上采样的.我想插值以便在立方体内找到值.
import numpy as np
# Grid points / sample locations
X = np.array([[0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0], [1,1,1.]])
# Function values at the grid points
F = np.random.rand(8)
Run Code Online (Sandbox Code Playgroud)
现在,RegularGridInterpolator
采取一个points
论点和一个values
论点.
points:float的ndarray元组,带有形状(m1,),...,(mn,)n个维度中定义规则网格的点.
values:array_like,shape(m1,...,mn,...)n维中规则网格上的数据.
我将此解释为可以这样调用:
import scipy.interpolate as irp
rgi = irp.RegularGridInterpolator(X, F)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我收到以下错误:
ValueError:有8个点数组,但值有1个维度
我在文档中误解了什么?
假设我有几个简单的模型位于food.py
:
import peewee as pw
db = pw.SqliteDatabase('food.db')
class BaseModel(pw.Model):
class Meta:
database = db
class Taco(BaseModel):
has_cheese = pw.BooleanField()
class Spaghetti(BaseModel):
has_meatballs = pw.BooleanField()
db.connect()
# populate with some data if table doesn't exist
from random import random
if not Taco.table_exists():
db.create_table(Taco)
for _ in range(10):
Taco.create( has_cheese = (random() < 0.5) )
db.commit()
if not Spaghetti.table_exists():
db.create_table(Spaghetti)
for _ in range(10):
Spaghetti.create( has_meatballs = (random() < 0.5) )
db.commit()
Run Code Online (Sandbox Code Playgroud)
后来,我有了food.py
和food.db
。但是假设Taco
和 …
假设我有一个如下所示的 sqlite 表:
CREATE TABLE my_table (
id INTEGER PRIMARY KEY,
field1 INTEGER,
field2 INTEGER
);
INSERT INTO my_table (field1, field2) VALUES
(1, 2),
(2, 1),
(2, 1),
(3, 1),
(1, 2),
(2, 1);
Run Code Online (Sandbox Code Playgroud)
看起来像:
1|1|2
2|2|1
3|2|1
4|3|1
5|1|2
6|2|1
Run Code Online (Sandbox Code Playgroud)
对于组大小大于 1 的每组不同值,我想要一组相应的 id。对于上述情况,这将是:1,5
和2,3,6
。
如果我跑
SELECT id FROM my_table
GROUP BY
field1, field2
HAVING count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
只返回每个组的最后一个,即5
和6
。我可以返回每个组的所有ID 吗?
我想使用 matploblib 创建 XKCD 风格的 ROC 曲线图。它大部分工作正常,但我不明白为什么它不使用幽默。它肯定安装在我的系统上:
$ fc-list | grep -i humor
/home/user/.local/share/fonts/Humor-Sans.ttf: Humor Sans:style=Regular
Run Code Online (Sandbox Code Playgroud)
如何让 matplotlib 使用 Humor-Sans 字体?
我已经尝试添加fontname='Humor Sans'
:
/home/user/.local/lib/python3.6/site-packages/matplotlib/font_manager.py:1328:
UserWarning: findfont: Font family ['Humor Sans'] not found.
Falling back to DejaVu Sans
Run Code Online (Sandbox Code Playgroud)
import matplotlib.pyplot as plt
import numpy as np
with plt.xkcd():
xs = np.linspace(0, 1, 50)
plt.plot(xs, (1 / (-xs) + 50) / 50)
plt.plot(xs, xs)
plt.title('ROC Curve')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.savefig('xkcd-roc-explanation.png')
Run Code Online (Sandbox Code Playgroud)
如果我打算将一个布尔值 NumPy 数组传递给 Fortran 变量,应该如何输入它们f2py
?我已经尝试了integer*1
和logical*1
,但是这两个都表明该数组已被复制。
例如,如果我编译文件foo.f95
,包含:
subroutine foo(x, n)
logical*1 x(n)
!f2py intent(in) x
!f2py intent(hide), depend(x) :: n=shape(x,0)
...
end subroutine
Run Code Online (Sandbox Code Playgroud)
使用f2py -c -m foo foo.f90 -DF2PY_REPORT_ON_ARRAY_COPY=1
并运行以下内容:
import numpy as np
import foo
x = np.random.randn(100) < 0
foo.foo(x)
Run Code Online (Sandbox Code Playgroud)
它打印
copied an array: size=100, elsize=1
Run Code Online (Sandbox Code Playgroud)
如果我更改logical*1
为integer*1
. Fortran 文件中布尔数组的正确类型是什么,以便不复制数组?
请注意,这不是内存连续性的问题,因为数组是一维的——foo.foo(np.asfortranarray(x))
打印相同的复制消息。
我可以先获得给定大小的DFT矩阵,表示n
通过
import numpy as np
n = 64
D = np.fft.fft(np.eye(n))
Run Code Online (Sandbox Code Playgroud)
FFT当然只是应用于D
矢量的快速算法:
x = np.random.randn(n)
ft1 = np.dot(D,x)
print( np.abs(ft1 - fft.fft(x)).max() )
# prints near double precision roundoff
Run Code Online (Sandbox Code Playgroud)
可以通过应用D
矩阵的行和列来获得2D FFT :
x = np.random.randn(n,n)
ft2 = np.dot(x, D.T) # Apply D to rows.
ft2 = np.dot(D, ft2) # Apply D to cols.
print( np.abs(ft2 - fft.fft2(x)).max() )
# near machine round off again
Run Code Online (Sandbox Code Playgroud)
我如何类似地计算三维离散傅立叶变换?
也就是说,
x = np.random.randn(n,n,n)
ft3 = # dot operations …
Run Code Online (Sandbox Code Playgroud)