我正在尝试在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) 我正在运行一些模拟,这些模拟涉及将 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 …
我有一个带有一列非唯一数字的 Pandas DataFrame。我想为每个非唯一值返回不同的随机数,但在非唯一值出现的每一行返回相同的随机数,即随机数的输出数据帧的形状与未分组数据帧的形状相匹配。
我可以这样做:
df.groupby('NonUnique').transform(lambda x: np.random.rand())
df这将根据需要为 中的每一列返回不同的随机数。
然而,对于大型数据帧来说,这很慢,但np.random.rand(df.size)速度非常快。有什么方法可以更有效地实现我想要的目标吗?我似乎找不到一种方法来矢量化每组的作业......
我正在尝试使用 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 ×4
arrays ×1
cartopy ×1
matplotlib ×1
mayavi ×1
numpy ×1
pandas ×1
performance ×1
python-3.x ×1
traitsui ×1