小编Siy*_*iyh的帖子

TraitsUI中的Mayavi colorbar创建空白窗口

我正在尝试在TraitsUI中创建一个包含两个Mayavi数字的GUI.我根据Mayavi文档中的多个引擎示例实现了这些数字.

但是,当我向其中一个图形添加颜色条并运行GUI脚本时,除了所需的TraitsUI窗口外,它有时会打开一个空白的Mayavi场景编辑器窗口.这个空白窗口并不总是出现,从不在重新启动python内核后的第一次运行,有时只是在连续几次运行脚本并关闭每次出现的窗口之后.

运行下面大大减少的代码会产生相同的行为,删除该mlab.colorbar(s)行可以解决问题.如何在不打开空白窗口的情况下获得彩条?对于表面图,似乎没有明显的方法将颜色条指定给特定的图形.我在Windows 7上运行Python 3.5(但在Ubuntu上遇到相同的问题).

from traits.api import HasTraits, Instance, on_trait_change
from traitsui.api import View, Item
import numpy as np

from mayavi.core.api import Engine
from mayavi.core.ui.api import SceneEditor, MlabSceneModel
from mayavi import mlab

#Generate a test surface to display
def test_surf():
    x, y = np.mgrid[-7.:7.05:0.1, -5.:5.05:0.05]
    z = np.sin(x + y) + np.sin(2 * x - y) + np.cos(3 * x + 4 * y)
    return x, y, z        

class MyApp(HasTraits):

    #Create a mayavi scene with …
Run Code Online (Sandbox Code Playgroud)

python python-3.x mayavi traitsui

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

移动 Numpy 数组的最快方法

我正在运行一些模拟,这些模拟涉及将 2D Numpy 数组中的值与其“邻居”重复比较;例如。指标位置的值(y,x)处的值与(y-1,x)来自同一数组的索引位置处的值进行比较。

目前我正在使用这样的功能:

# example of the typical size of the arrays
my_array = np.ndarray((500,500))    

shapey, shapex = my_array.shape
Yshape = (1, shapex)
Yzeros = np.zeros((1, shapex))

def syf(A, E=True):
    if E == True:
        return np.concatenate((A[1:], A[-1].reshape(Yshape)), axis=0)
    else:
        return np.concatenate((A[1:], Yzeros), axis=0)

shifted_array = syf(my_array)

difference_in_y = shifted_array - my_array 
Run Code Online (Sandbox Code Playgroud)

这可以选择使用边缘值或零在数组边缘进行比较。这些功能也可以在任一轴的任一方向上执行此操作。

有人对更快的方法有什么建议吗?我试过np.roll(慢得多)和这个:

yf = np.ix_(range(shapey)[1:] + [shapey,], range(shapex))
shifted_array = my_array[yf]
Run Code Online (Sandbox Code Playgroud)

这有点慢。

在需要 10 小时运行的程序中,这些函数每秒调用约 200 次,因此任何小的加速都更受欢迎!

谢谢。

编辑:

因此,如果每次调用移位函数时都需要相同的微分方法,那么下面的 Divakars …

python arrays performance numpy

6
推荐指数
1
解决办法
8095
查看次数

如何在 Pandas 中有效地为每个组分配单个值

我有一个带有一列非唯一数字的 Pandas DataFrame。我想为每个非唯一值返回不同的随机数,但在非唯一值出现的每一行返回相同的随机数,即随机数的输出数据帧的形状与未分组数据帧的形状相匹配。

我可以这样做: df.groupby('NonUnique').transform(lambda x: np.random.rand())

df这将根据需要为 中的每一列返回不同的随机数。

然而,对于大型数据帧来说,这很慢,但np.random.rand(df.size)速度非常快。有什么方法可以更有效地实现我想要的目标吗?我似乎找不到一种方法来矢量化每组的作业......

python pandas

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

更改投影 Matplotlib 轴的背景颜色

我正在尝试使用 Cartopy 创建一个图形,该图形需要在未投影轴上绘制投影轴。

这是一个尽可能简单的代码版本,它将轴上的内容替换为背景颜色:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

#Setup figure
fig = plt.figure()

#Unprojected axis
ax1 = fig.add_subplot(111, axisbg='b')

#Projected axis
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())

plt.show()
Run Code Online (Sandbox Code Playgroud)

这不是让蓝色轴可见,而是产生了这个: 在此处输入图片说明projection=ccrs.Mercator()从上面的代码中 删除参数会产生这个预期的结果: 在此处输入图片说明

如何使投影轴背景透明?

谢谢!

编辑:我已经尝试了这些其他设置背景透明的方法,但没有运气:

ax2 = fig.add_subplot(111, axisbg='None', alpha=0, projection=ccrs.Mercator())
ax2.patch.set_facecolor('none')
ax2.patch.set_alpha(0)
Run Code Online (Sandbox Code Playgroud)

python matplotlib cartopy

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