我有一个2d数组(doubles)代表一些数据,它有一堆数据NaNs.数据的等高线图如下所示:

所有的白色空间都是NaNs灰色菱形,供参考,填充的轮廓显示我的数据形状.当我使用过滤数据时imfilt,NaNs显着地咀嚼数据,所以我们最终会得到这样的结果:

您可以看到支持集显着缩小.我无法使用它,因为它已经咀嚼了边缘上的一些更有趣的变化(由于我的实验特定的原因,这些边缘很重要).
是否有一个函数可以在一个孤岛中进行过滤NaNs处理边缘,类似于矩形过滤窗口的边缘,而不仅仅是杀死边缘?有点像nanmean功能,除了卷积图像?
这是我的过滤器代码:
filtWidth = 7;
imageFilter=fspecial('gaussian',filtWidth,filtSigma);
%convolve them
dataFiltered = imfilter(rfVals,imageFilter,'symmetric','conv');
Run Code Online (Sandbox Code Playgroud)
和绘制等高线图的代码:
figure
contourf(dataFiltered); hold on
plot([-850 0 850 0 -850], [0 850 0 -850 0], 'Color', [.7 .7 .7],'LineWidth', 1); %the square (limits are data-specific)
axis equal
Run Code Online (Sandbox Code Playgroud)
Mathworks文件交换(ndanfilter.m)中有一些代码接近我想要的,但我相信它只是插NaNs在图像内部的插值,而不是显示这种岛型效果的数据.
注意:我刚刚找到了nanconv.m,它完全符合我的要求,具有非常直观的用法(卷积图像,忽略NaN,非常像nanmean作品).我已经将这部分作为我接受的答案,并将其与其他答案的表现进行了比较.
相关问题
我想使用模型存储自定义数据.为此,我有点混淆选择哪个项目模型进行子类化.我需要澄清一下,哪个是子类化的最佳模型?而且我还需要QAbstractItemModel优于QStandardItemModel的优势?
谢谢!
精简版
使用的默认委托是QTreeView什么?特别是我想找到它的paint()方法?
更长的版本
我是一个Python用户(Pyside/PyQt),并使用自定义委托来重新创建一些功能QTreeView.因此,我试图找到在a中使用的默认委托和绘制方法QTreeView.更好的是解释它是如何工作的.
交叉岗位
我在Qt中心发布了同样的问题(http://www.qtcentre.org/threads/64458-Finding-default-delegate-for-QTreeView?).
我经常使用它numpy.random.seed()来提高结果的可重复性。我还发现当书籍/教程使用它时它很有帮助(例如,np.random.seed(42)),以便人们可以更轻松地重现事物。
目前的文档称random.seed()不鼓励这样做,并且是一个遗留功能,但没有任何解释。我想知道为什么:
random.seed()
Reseed a legacy MT19937 BitGenerator
This is a convenience, legacy function.
The best practice is to not reseed a BitGenerator,
rather to recreate a new one. This method is here
for legacy reasons.
Run Code Online (Sandbox Code Playgroud)
请注意,文档继续说道:
# This example demonstrates best practice.
from numpy.random import MT19937
from numpy.random import RandomState, SeedSequence
rs = RandomState(MT19937(SeedSequence(123456789)))
# Later, you want to restart the stream
rs = RandomState(MT19937(SeedSequence(987654321)))
Run Code Online (Sandbox Code Playgroud)
我不确定为什么这是最佳实践。为什么这比使用更好random.seed()?特别是,当您在教授一个概念并希望每次都重现相同的结果并希望保持代码简单时?至少在表面上,random.seed()还调用 …
以下是Qt文档的引用:
某些资源需要根据用户的语言环境进行更改,例如翻译文件或图标.这是通过向qresource标记添加lang属性,指定合适的区域设置字符串来完成的.例如:
Run Code Online (Sandbox Code Playgroud)<qresource> <file>cut.jpg</file> </qresource> <qresource lang="fr"> <file alias="cut.jpg">cut_fr.jpg</file> </qresource>如果用户的语言环境是法语(即QLocale :: system().name()返回"fr_FR"),则:/ cut.jpg将成为对cut_fr.jpg图像的引用.对于其他语言环境,使用cut.jpg.
我试着这样做但我失败了.这是我的*.qrc文件的一部分:
<qresource>
<file>HtmlTemplates/angle.html</file>
<file>HtmlTemplates/bottom.html</file>
<file>HtmlTemplates/top.html</file>
</qresource>
<qresource lang="en">
<file alias="HtmlTemplates/angle.html">HtmlTemplates/en/angle.html</file>
<file alias="HtmlTemplates/bottom.html">HtmlTemplates/en/bottom.html</file>
<file alias="HtmlTemplates/top.html">HtmlTemplates/en/top.html</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)
如您所见,它遵循与手册中的示例完全相同的模式.但是,尝试编译此文件会产生以下结果:
..\Blinky_2.0\resources.qrc: Warning: potential duplicate alias detected: 'angle.html'
..\Blinky_2.0\resources.qrc: Warning: potential duplicate alias detected: 'bottom.html'
..\Blinky_2.0\resources.qrc: Warning: potential duplicate alias detected: 'top.html'
Run Code Online (Sandbox Code Playgroud)
如果我尝试修改QtCreator中的*.qrc文件,它会将其重置为错误状态,删除lang属性:
<qresource prefix="/">
<file>HtmlTemplates/angle.html</file>
<file>HtmlTemplates/bottom.html</file>
<file>HtmlTemplates/top.html</file>
<file alias="HtmlTemplates/angle.html">HtmlTemplates/en/angle.html</file>
<file alias="HtmlTemplates/bottom.html">HtmlTemplates/en/bottom.html</file>
<file alias="HtmlTemplates/top.html">HtmlTemplates/en/top.html</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)
所以我被迫在我的代码中迭代不同语言环境的资源.我错过了什么或这是一个Qt错误?Qt版本是4.8.4,QtCreator版本是2.8.1.
学习PySide,我正在调整文本编辑小部件(QLineEdit)并尝试使用setPlaceHolderText设置占位符文本,如下面的代码片段(我从中调用main).不幸的是,它没有像我预期的那样工作.代码运行,但文本框为空,不显示占位符文本.我在Windows 7,Python 2.7(在iPython中工作).
class MyTextEdit(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.textEditor=QtGui.QLineEdit(self)
self.textEditor.move(50,15)
self.textEditor.setPlaceholderText("Don't mind me.")
self.setGeometry(100, 100, 200, 50)
self.show()
Run Code Online (Sandbox Code Playgroud)
任何人都明白我做错了什么?我正在关注以下网站的示例:
http://nullege.com/codes/search/PyQt4.QtGui.QLineEdit.setPlaceholderText
http://www.pythoncentral.io/pyside-pyqt-tutorial-interactive-widgets-and-layout-containers/
而且看不出我在做什么不同.
我正在使用 Python 构建一个图像渲染应用程序,它将 numpy 数组渲染为图像。我需要一种方法来自动计算屏幕 DPI,因为我在不同的显示器(例如,2x2 英寸)上生成相同大小的图像。我在 Windows 10,Python 3.7。
我不是在问如何获得显示器的屏幕尺寸——比如确定你的显示器是否为 3000x2000 像素(如解决:如何在 Python 中获得显示器分辨率?)。
相反,我想要一些专门计算 DPI 的东西,并考虑到用户应用的任何可能改变其系统 DPI 的比例设置。例如,我将比例设置为 250%。
按照专家交流(https://www.experts-exchange.com/questions/21794611/Detecting-system-DPI-settings-in-Python.html)的这个答案,我尝试使用这个:
from ctypes import windll
def get_ppi():
LOGPIXELSX = 88
LOGPIXELSY = 90
user32 = windll.user32
user32.SetProcessDPIAware()
dc = user32.GetDC(0)
pix_per_inch = windll.gdi32.GetDeviceCaps(dc, LOGPIXELSX)
print("Horizontal DPI is", windll.gdi32.GetDeviceCaps(dc, LOGPIXELSX))
print("Vertical DPI is", windll.gdi32.GetDeviceCaps(dc, LOGPIXELSY))
user32.ReleaseDC(0, dc)
return pix_per_inch
Run Code Online (Sandbox Code Playgroud)
这似乎是正确的范围,但返回的数字太低。它返回 240,而我的实际 DPI 更接近 285。
我宁愿避免为此使用像 Qt 这样的 GUI 框架,因为我想最大限度地减少开销,但如果这是唯一的方法,那么我会的!如果我必须使用框架,我更喜欢 PyQt5。
我正在将 PySpin api 用于 Anaconda 中的 Point Grey 相机。该 API 是名为 Spinnaker ( https://www.ptgrey.com/spinnaker-sdk )的 C++ 库的 Python 包装器。
当我在 Spyder ( import PySpin) 中导入时,一切正常(请注意,我从安装了所有内容的环境中的 Conda 提示符启动了 Spyder)。不幸的是,从 conda 提示符而不是 Spyder(python foo.py其中foo.py包含import PySpin)运行导入会产生:
英特尔 MKL 致命错误:无法加载 mkl_intel_thread.dll。
序号242在动态链接库C:\Anaconda3\Library\bin\mkl_intel_thread.dll中找不到
注意我在 anaconda 提示符下从一个轮子安装了 Spinnaker (PySpin):
pip install spinnaker_python-1.20.0.15-cp36-cp36m-win_amd64.whl
Run Code Online (Sandbox Code Playgroud)
网上一堆地方说要在 C:\Windows\System32 中找到以下文件并重命名或删除它们:
mkl_core.dll
mkl_def.dll
mkl_intel_thread.dll
Run Code Online (Sandbox Code Playgroud)
这些文件不存在于我的机器上,所以这似乎不是我的问题。
例如,他们在这里提到了该解决方案:
序号 242 无法位于动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll 中
根据这里的建议(为什么“使用命名空间 std”被认为是不好的做法?),我正在避免using namespace std;. 然而,根据C++ Primer 3.1节中的内容,我一直在单独进行声明,如下所示:
using std::cout;
using std::cin;
using std::setw;
using std::setprecision;
Run Code Online (Sandbox Code Playgroud)
假设这被认为是一种可接受的做法,是否有一种紧凑的方法可以在一行中陈述所有这些内容?我知道我可以这样做:
using std::cout; using std::cin; using std::setw; using std::setprecision;
Run Code Online (Sandbox Code Playgroud)
但这并不是特别紧凑。本着定义变量时如何工作的精神,我尝试了以下操作:
using std::cout, std::cin, std::setw, std::setprecision;
Run Code Online (Sandbox Code Playgroud)
但我的编译器抛出异常。
如果我的假设是错误的(即,如果using std::cout;不是好的做法),那么这实际上可能就是答案。我当然对此持开放态度,因为我不想鼓励或编写臭代码。