Mathematica:MathLink 错误消息

2024-04-07

我想我开始理解如何将用 C/C++ 编写的函数链接到数学。我面临的问题是我不知道如何将错误消息从我的 C 包装器发送到 Mathematica。在谷歌搜索后我发现了这个MathLink 教程 http://www.edenwaith.com/development/tutorials/mathlink/ML_Tut.pdf.

第 1.7 节让我了解了如何发送错误消息,但我得到了奇怪的结果。这是我正在使用的代码。


//File cppFunctions.h
#ifndef CPPFUNCTIONS_H
#define CPPFUNCTIONS_H
class Point {
public:
    double x, y;
    Point(){ x=y=0.0;}
    Point(double a, double b): x(a), y(b) {}
};
class Line {
public:
    Point p1, p2;
    Line(void) {}
    Line(const Point &P, const Point &Q): p1(P), p2(Q) {}
    double distanceTo(const Line &M, const double &EPS = 0.000001){
        double x21 = p2.x - p1.x;     double y21 = p2.y - p1.y;
        double x43 = M.p2.x - M.p1.x; double y43 = M.p2.y - M.p1.y;
        double x13 = p1.x - M.p1.x;   double y13 = p1.y - M.p1.y;
        double den = y43*x21 - x43*y21;
        if (den*den < EPS) return -INFINITY;
        double numL = (x43*y13 - y43*x13)/den;
        double numM = (x21*y13 - y21*x13)/den;
        if (numM < 0 || numM > 1) return -INFINITY;
        return numL;
    }
};
#endif

文件 cppFunctions.h 声明类Point and Line。除了我想使用的函数之外,我已将此类剥离到最低限度数学。我想找到从一条线到另一条线的距离。这个函数是C版本的lineInt in Mathematica 中的线框图 https://stackoverflow.com/questions/6353337/mathematica-3d-wire-frames。要使用此功能数学我们需要一个包装函数来获取输入数学并将输出发送回数学.


//mlwrapper.cpp
#include "mathlink.h"
#include <math.h>
#include "cppFunctions.h"

void ML_GetPoint(Point &P){
    long n;
    MLCheckFunction(stdlink, "List", &n);
    MLGetReal64(stdlink, &P.x);
    MLGetReal64(stdlink, &P.y);
}
void ML_GetLine(Line &L){
    long n;
    MLCheckFunction(stdlink, "List", &n);
    ML_GetPoint(L.p1);
    ML_GetPoint(L.p2);
}
double LineDistance(void) {
    Line L, M;
    ML_GetLine(L);
    ML_GetLine(M);
    return L.distanceTo(M);
}
int main(int argc, char* argv[]) {
    return MLMain(argc, argv);
}

我创建了两个辅助函数:ML_GetPoint and ML_GetLine帮助我获得输入数学。从包含两个列表的列表中获取一行。每个子列表都是 2 个实数(一个点)的列表。要在 Mathematica 中尝试此功能,我们需要更多文件。


//mlwrapper.tm
double LineDistance P((void));
:Begin:
:Function: LineDistance
:Pattern: LineDistance[L_List, M_List]
:Arguments: {L, M}
:ArgumentTypes: {Manual}
:ReturnType: Real
:End:
:Evaluate: LineDistance::usage = "LineDistance[{{x1,y1}, {x2,y2}}, {{x3,y3}, {x4,y4}}] gives the distance between two lines."
:Evaluate: LineDistance::mlink = "There has been a low-level MathLink error. The message is: `1`"

该文件声明函数 LineDistance 将手动获取参数,并将返回一个实数。最后两行很重要。首先Evaluate宣布usage的函数。它会在以下情况下给出有关该功能的简短消息:?LineDistance被输入到数学。另一个Evaluate是我希望在出现错误时使用的那个(稍后会详细介绍)。


#Makefile
VERSION=8.0
MLINKDIR = .
SYS = MacOSX-x86-64
CADDSDIR = /Applications/Mathematica.app/SystemFiles/Links/MathLink/DeveloperKit/CompilerAdditions

INCDIR = ${CADDSDIR}
LIBDIR = ${CADDSDIR}

MPREP = ${CADDSDIR}/mprep
RM = rm

CXX = g++

BINARIES = mlwrapper

all : $(BINARIES)

mlwrapper : mlwrappertm.o mlwrapper.o
    ${CXX} -I${INCDIR} mlwrappertm.o mlwrapper.o -L${LIBDIR} -lMLi3 -lstdc++ -framework Foundation -o $@

.cpp.o :
    ${CXX} -c -I${INCDIR} $<

mlwrappertm.cpp : mlwrapper.tm
    ${MPREP} $? -o $@

clean :
    @ ${RM} -rf *.o *tm.c mlwrappertm.cpp

最后一个文件是 Makefile。至此,我们就可以在 Mathematica 中测试该函数了。


我之前应该提到过,我使用的是 Mac OS X,我不确定这在 Windows 上如何工作。在 mlwrapper.cpp 中,主函数需要更多代码,您可以在以下提供的示例之一中找到这些代码数学.

在终端我知道这样做:

make > makelog.txt
make clean

这使得可执行文件mlwrapper。现在我们可以开始使用 Mathematica:

SetDirectory[NotebookDirectory[]];
link = Install["mlwrapper"];
?LineDistance
Manipulate[
 Grid[{{
    Graphics[{
      Line[{p1, p2}, VertexColors -> {Red, Red}],
      Line[{p3, p4}]
    },
    PlotRange -> 3, Axes -> True],
   LineDistance[{p1, p2}, {p3, p4}]
  }}],
{{p1, {-1, 1}}, Locator, Appearance -> "L1"},
{{p2, {2, 1}}, Locator, Appearance -> "L2"},
{{p3, {2, -2}}, Locator, Appearance -> "M1"},
{{p4, {2, 3}}, Locator, Appearance -> "M2"}

]

我们得到的输出如下:

只要您输入正确的参数,一切都会正常工作。也就是说,2 个列表,每个列表都是由 2 个双精度数组成的 2 个列表组成的列表。也许还有另一种获取输入的方法,如果您知道如何请告诉我。如果我们坚持这种方法,我们所需要的只是一种让数学用户知道是否有任何错误。一个非常简单的问题就是输入错误。假设我输入这个:

LineDistance[{{0, 0}, {0}}, {{1, -1}, {1, 1}}]

输出是$Failed。怎么样:

LineDistance[{{1, -1}, {1, 1}}]

输出是LineDistance[{{1, -1}, {1, 1}}]。我猜发生这种情况是因为我们在Pattern的部分.tm该函数接受两个列表,并且由于我们只给出了一个列表,因此它与模式不匹配。这是真的?

无论如何,按照我找到的教程,让我们修改文件 mlwrapper.cpp 如下:

#include "mathlink.h"
#include <math.h>
#include <string>
#include "cppFunctions.h"

bool ML_Attempt(int func, const char* err_tag){
    if (!func) {
        char err_msg[100];
        sprintf(err_msg, "Message[%s,\"%.76s\"]", err_tag, MLErrorMessage(stdlink));
        MLClearError(stdlink); MLNewPacket(stdlink); MLEvaluate(stdlink, err_msg);
        MLNextPacket(stdlink); MLNewPacket(stdlink); MLPutSymbol(stdlink, "$Failed");
        return false;
    }
    return true;
}
void ML_GetPoint(Point &P){
    long n;
    if(!ML_Attempt(MLCheckFunction(stdlink, "List", &n), "LineDistance::mlink2"))return;
    if(!ML_Attempt(MLGetReal64(stdlink, &P.x), "LineDistance::mlink3")) return;
    if(!ML_Attempt(MLGetReal64(stdlink, &P.y), "LineDistance::mlink4")) return;
}
void ML_GetLine(Line &L){
    long n;
    if(!ML_Attempt(MLCheckFunction(stdlink, "List", &n), "LineDistance::mlink1"))return;
    ML_GetPoint(L.p1);
    ML_GetPoint(L.p2);
}
double LineDistance(void) {
    Line L, M;
    ML_GetLine(L);
    ML_GetLine(M);
    return L.distanceTo(M);
}
int main(int argc, char* argv[]) {
    return MLMain(argc, argv);
}

并将以下内容添加到 mlwrapper.tm 文件的末尾

:Evaluate: LineDistance::mlink1 = "There has been a low-level MathLink error. The message is: `1`"
:Evaluate: LineDistance::mlink2 = "There has been a low-level MathLink error. The message is: `1`"
:Evaluate: LineDistance::mlink3 = "There has been a low-level MathLink error. The message is: `1`"
:Evaluate: LineDistance::mlink4 = "There has been a low-level MathLink error. The message is: `1`"

现在让我们使用 make 并尝试在 Mathematica 中犯一些错误。

我发布了输出的屏幕截图,而不是写下所有内容。

请注意重复调用后我们如何收到不同的错误。该函数似乎在遇到错误后继续执行该行。如果我不使用函数中的任何其他 ML 函数ML_Attempt我只使用MLEvaluate发送错误标签,然后 MathLink 已损坏,我必须重新安装该链接。有谁知道如何发送错误消息到数学 from C?


UPDATE:

基于已经给出的答案和另一个有用的答案document http://library.wolfram.com/infocenter/Books/3710/(第 8 章)我设法让它发挥作用。目前代码不太漂亮,但这让我提出了以下问题。是否可以提前终止函数?在常规 C 程序中,如果遇到错误,我会打印一条错误消息并使用exit功能。我们可以做类似的事情吗?如果我们使用exit函数链接将被破坏,我们将不得不重新安装该函数。取函数ML_GetPoint and ML_GetLine例如。如果此处发生错误,则在主函数中继续进行计算是没有意义的LineDistance。我们需要清除所获得的任何错误,向 Mathematica 发送一条消息来指定错误,暂时退出并等待下一次调用。


作为 @ragfield 解决方案的替代方案,您可以将函数声明为void并手动返回结果。这是一个基于的示例addTwo标准示例。这是模板:

void addtwo P(( int, int));

:Begin:
:Function:       addtwo
:Pattern:        AddTwo[i_Integer, j_Integer]
:Arguments:      { i, j }
:ArgumentTypes:  { Integer, Integer }
:ReturnType:     Manual
:End:

:Evaluate: AddTwo::usage = "AddTwo[x, y] gives the sum of two machine 
    integers x and y."
:Evaluate: AddTwo::badargs = "Arguments are expected to be positive numbers"

和功能:

void addtwo( int i, int j) {
    if(i>0&&j>0){
        MLPutInteger(stdlink,i+j);
    }else{
        MLPutFunction(stdlink,"CompoundExpression",2);
            MLPutFunction(stdlink,"Message",1);
                MLPutFunction(stdlink,"MessageName",2);
                    MLPutSymbol(stdlink,"AddTwo");
                    MLPutString(stdlink,"badargs");
            MLPutSymbol(stdlink,"$Failed");
    }
}

以下是使用示例:

In[16]:= AddTwo[1,2]
Out[16]= 3

In[17]:= AddTwo[-1,2]
During evaluation of In[17]:= AddTwo::badargs: Arguments are expected 
to be positive numbers

Out[17]= $Failed

这是一种更“高级”的方法,这样您就不必显式处理数据包。

但是,我认为最好通过适当的模式在 Mathematica 端执行输入参数的完整错误检查,并为 C 代码中检测到的某些内部错误保存错误消息的选项(实际上我更进一步并返回 Mathematica只是错误代码作为整数或字符串,并让更高级别的 mma 包装器处理它们并发出消息)。您可以将这些模式放入模板文件中,也可以将 MathLink Mathematica 函数包装到另一个将执行错误检查的函数中。不过,我对 Mathlink 的经验非常有限,所以我在这里的意见也许不重要。

EDIT

根据评论中的请求(尽管我不确定我是否正确理解了该请求):

extern void addeight( void );
extern void addall(void);

static void putErrorMessageAndReturnFailure(const char *fname, const char *msgtag);

void addeight(void)
{
    int i,j,k,l,i1,j1,k1,l1;
    MLGetInteger(stdlink,&i);
    MLGetInteger(stdlink,&j);
    MLGetInteger(stdlink,&k);
    MLGetInteger(stdlink,&l);
    MLGetInteger(stdlink,&i1);
    MLGetInteger(stdlink,&j1);
    MLGetInteger(stdlink,&k1);
    MLGetInteger(stdlink,&l1);

    if(i<0||j<0||k<0||l<0||i1<0||j1<0||k1<0||l1<0){
        putErrorMessageAndReturnFailure("AddEight","badargs");              
    }else{
            MLPutFunction(stdlink,"List",2);
            MLPutFunction(stdlink,"List",2);
                MLPutInteger(stdlink,i+i1);
                MLPutInteger(stdlink,j+j1);
            MLPutFunction(stdlink,"List",2);
                MLPutInteger(stdlink,k+k1);
                MLPutInteger(stdlink,l+l1);
    }   
}

void addall(){
    int *data, len, i = 0,sum = 0;
    if(!MLGetIntegerList(stdlink, &data, &len)){
        putErrorMessageAndReturnFailure("AddAll","interr");
        return;
    }
    for(i=0;i<len;i++){
        if(data[i]<0){
            putErrorMessageAndReturnFailure("AddAll","badargs");
            return;
        }else{
            sum+=data[i];
        }
    }
    MLPutInteger(stdlink,sum);
        MLReleaseInteger32List(stdlink, data, len);
}


static void putErrorMessageAndReturnFailure(const char *fname, const char *msgtag){
    MLPutFunction(stdlink,"CompoundExpression",2);
        MLPutFunction(stdlink,"Message",1);
                MLPutFunction(stdlink,"MessageName",2);
                    MLPutSymbol(stdlink,fname);
                    MLPutString(stdlink,msgtag);
        MLPutSymbol(stdlink,"$Failed");
}

和模板

void addeight P(( ));

:Begin:
:Function:       addeight
:Pattern:        AddEight[{{i_Integer, j_Integer},{k_Integer,l_Integer}},{{i1_Integer,j1_Integer},{k1_Integer,l1_Integer}}]
:Arguments:      { i, j, k ,l, i1,j1,k1,l1 }
:ArgumentTypes:  { Manual }
:ReturnType:     Manual
:End:

:Evaluate: AddEight::usage = "AddEight[{{i_Integer, j_Integer},{k_Integer,l_Integer}}, {{i1_Integer, j1_Integer},{k1_Integer,l1_Integer}}] gives the sum as a list: {{i+i1,j+j1},{k+k1,l+l1}}."

:Evaluate: AddEight::badargs = "Arguments are expected to be positive numbers"


void addall P(( ));

:Begin:
:Function:       addall
:Pattern:        AddAll[fst:{{_Integer, _Integer},{_Integer,_Integer}},sec:{{_Integer, _Integer},{_Integer,_Integer}}]
:Arguments:      { Flatten[{fst,sec}]}
:ArgumentTypes:  { Manual }
:ReturnType:     Manual
:End:

:Evaluate: AddAll::usage = "AddAll[{{i_Integer, j_Integer},{k_Integer,l_Integer}},{{i1_Integer, j1_Integer},{k1_Integer,l1_Integer}}] gives the total sum of elemens of the sub-lists."

:Evaluate: AddAll::badargs = "Arguments are expected to be positive numbers"

:Evaluate: AddAll::interr = "Internal error - error getting the data from Mathematica"

例子:

In[8]:= AddEight[{{1,2},{3,4}},{{5,6},{7,8}}]
Out[8]= {{6,8},{10,12}}

In[9]:= AddEight[{{-1,2},{3,4}},{{5,6},{7,8}}]
During evaluation of In[9]:= AddEight::badargs: Arguments are expected to be positive numbers

Out[9]= $Failed

In[10]:= AddAll[{{1,2},{3,4}},{{5,6},{7,8}}]
Out[10]= 36

In[11]:= AddAll[{{-1,2},{3,4}},{{5,6},{7,8}}]
During evaluation of In[11]:= AddAll::badargs: Arguments are expected to be positive numbers

Out[11]= $Failed
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mathematica:MathLink 错误消息 的相关文章

  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • Slickgrid 单元格文本选择在 Chrome 或 Firefox 中无法正常工作

    我已经根据设置了enableTextSelectionOnCellsSlickGrid 和文本选择 https stackoverflow com questions 9966390 slickgrid and text selection
  • 如何在 Android 中解析另一个 JSON 数组中的 JSON 数组

    拜托 请帮助我 我正在开发一个项目 并且正在从 JSON 格式的 Web 服务获取数据 我正在尝试解析它 但是我无法做到 我有这个 json data response status code 1 message sucess user i
  • 整数文字存储到“Int”时会溢出

    Xcode 抱怨以下行 let primary UInt32 0x8BC34AFF 出现此错误消息 Integer literal 2344831743 overflows when stored into Int 我看到它溢出了一个有符号
  • Javascript - 事件属性的浏览器命名约定让我感到困惑

    我一直想知道为什么不同浏览器的 JavaScript 中事件的 target sourceElement 的属性名称存在差异 event srcElement in Internet Explorer event target in mos
  • 当状态更新不影响 UI 时防止“未包含在 act(...)”中的玩笑警告

    我试图弄清楚是否有一种方法可以防止 Jest testing library 抛出 未包含在 act 警告 当我在导致警告发生的状态更新后没有任何可断言的情况时 或者我是否应该忽略这个警告 假设我有这个简单的组件 import React
  • 如何将 com.apple.systemuiserver 首选项重新加载到 SystemUIServer 应用程序中?

    对于我的 Mac OSX 应用程序 我有一个功能 可以在单击按钮时删除屏幕右上角的系统时钟 控制显示哪些系统菜单 包括系统时钟 的首选项存储在 Library Preferences com apple systemuiserver pli
  • 如何更改 Eclipse 以在 Javascript 编辑器中使用空格而不是制表符?

    我使用 Eclipse JavaScript 插件 我的文本编辑器设置为 插入空格作为制表符 这工作正常 直到我选择一个代码块并制表符或移动制表符 运行 JSLint 和 AARGghh 混合空格和制表符 我缺少什么吗 这可能吗 我不太确定
  • 生成随机颜色的问题 - asp.net 和 c#

    我需要在我的 asp net 应用程序中生成十六进制值的随机颜色来绘制图表 Random random new Random color String Format 0 X6 random Next 0x1000000 上面的代码生成随机颜
  • 当scapy和pypcap严重丢失时,如何嗅探python上的所有数据包?

    我尝试使用 python 在 Win10 上嗅探数据包 然而 我发现很多数据包实际上是被 scapy 丢弃的 例如 我从 ftp 下载一个 2 MB 的文件 wireshark 捕获了近 2000 个数据包 而 scapy 只捕获了 500
  • XAMPP的Shell在哪里?

    我正在使用最新版本的 XAMPP 和 XAMPP 控制面板 v2 5 2007 年 5 月 9 日 我想访问命令行来运行php q htdocs path to file php Problem 在我的 XAMPP 控制面板上 我没有看到S
  • 如何在 Linux 中进行惰性/延迟加载?

    我在 Windows 上运行得很好 应用程序加载我的插件 C Qt 我的插件进行智能搜索以查找已安装的 JRE 相应地设置库搜索路径 然后调用 JVM 中的一个函数来强制 jvm dll 将在此时加载 上一个问题 如何部署混合 C Java
  • 使用 xyz 数据框在 Python 中生成热图

    我有 x y z 数据存储在 pandas 数据框中 我想从中生成 2D 热图 深度图 df pd DataFrame np random randint 0 100 size 100 3 columns list XYZ 我不确定如何使用
  • 关闭 Rails 中的“updated_at”列

    我有一个简单的 日志 模型 它记录调用控制器操作的事实 该 日志 记录的条目应该创建一次并且永远不会更改 另外 我的数据库中会有很多这样的记录 因此 不需要 updated at 列 不需要浪费硬盘上的内存 我如何告诉 Rails 仅保留
  • SQL Server:不同行中两个日期的天数差异

    我正在使用 SQL Server 2012 目前正在编写一份报告 要求我找出两个日期之间的天数差异 基本上 对于一个特定的ReportID 我试图找出 ReportCompletedDate当 的时候ReportType PaperRece
  • Tkinter中Listbox和Radiobutton触发的事件

    我想创建一个由列表框所选项目的更改或单选按钮所选项目的更改触发的事件 是否可以 我使用这段代码 def getScript event state rb get listScript processor processor lb1 get
  • 从 numpy 数组中删除一些元素

    一个有趣的问题 我想从 numpy 数组中删除一些元素 但正如下面的简化示例代码所示 如 果不删除最后一个元素 它会起作用 但如果我们希望删除最后一个元素 它会失败 下面的代码工作正常 import numpy as np values n
  • DRY(不要重复自己)和 if 作业

    我想我忘记了一些明显的事情 但如果它验证了尽可能保持干燥的条件 我似乎找不到一种分配值的方法 一些代码来解释我的意思 a b gt 1 b c or even a a gt 1 a b 所以当然这里没什么大不了的 但是如果 a 要被方法调用
  • 外部模块中的 Rails Resque 未定义方法错误

    我在从 resque 工作线程中包含的模块调用方法时遇到问题 在下面的示例中 当我尝试调用时 我不断收到未定义的方法错误sayWorker 内部的方法 位于 TestLib 模块中 我已将代码简化为最基本的内容来说明问题 控制器 app c
  • 在 IIS 上运行 .NET Core

    我尝试在本地计算机上设置 IIS 来运行 NET Core API 我跟着https learn microsoft com en us aspnet core publishing iis https learn microsoft co
  • Mathematica:MathLink 错误消息

    我想我开始理解如何将用 C C 编写的函数链接到数学 我面临的问题是我不知道如何将错误消息从我的 C 包装器发送到 Mathematica 在谷歌搜索后我发现了这个MathLink 教程 http www edenwaith com dev