小编Jor*_*rdi的帖子

如何优雅地忽略MATLAB函数的某些返回值?

是否有可能从函数中获取'nth'返回值而不必为n-1之前的所有返回值创建虚拟变量?

比方说,我在MATLAB中有以下功能:

function [a,b,c,d] = func()
a = 1;
b = 2;
c = 3;
d = 4;
Run Code Online (Sandbox Code Playgroud)

现在假设,我只对第三个返回值感兴趣.这可以通过创建一个虚拟变量来完成:

[dummy, dummy, variableThatIWillUse, dummy] = func;
clear dummy;
Run Code Online (Sandbox Code Playgroud)

但我认为这有点难看.我认为你可能会做以下事情之一,但你不能:

[_, _, variableThatIWillUse, _] = func;

[, , variableThatIWillUse, ] = func;

variableThatIWillUse = func(3);

variableThatIWillUse = func()(3);

有没有优雅的方法可以做到这一点?


到目前为止,最好的解决方案是简单地使用variableThatIWillUse虚拟变量作为虚拟变量.这使我不必创建一个污染工作空间的真实虚拟变量(或者我需要清除它).简而言之:解决方案是使用variableThatIWillUsefor each返回值直到有趣的值.之后的返回值可以简单地忽略:

[variableThatIWillUse, variableThatIWillUse, variableThatIWillUse] = func;
Run Code Online (Sandbox Code Playgroud)

我仍然认为这是非常难看的代码,但如果没有更好的方法,那么我想我会接受答案.

matlab function return-value

117
推荐指数
5
解决办法
5万
查看次数

在MATLAB中查找当前m文件的位置

我正在许多不同的位置处理我的MATLAB代码,如果我能让代码知道它在计算机上的位置,那将会非常有用.我认为有一个函数能够准确地提供这些信息,但我记不起它的名称或在Google上找到它.

我的想法是,我有一个函数myFunc需要一个文件在自己的目录中,该文件可以位于不同计算机上的不同位置.所以在myFunc我想要做这样的事情:

dir = theFunctionImLookingFor;
system(fullfile(dir, 'someApp.exe'));
Run Code Online (Sandbox Code Playgroud)

(也可能是我正在寻找的函数不返回目录,而是目录+ m文件名,但这对我来说没什么区别.)

matlab

47
推荐指数
3
解决办法
5万
查看次数

在C#中禁止对未使用的异常变量发出警告

我有这个代码:

try {
    someMethod();
} catch (XYZException e) {
    // do something without using e
}
Run Code Online (Sandbox Code Playgroud)

这样做会给我一个关于声明但从不使用的警告e,这是我讨厌的.但是,我也不想使用catch没有该变量的子句,因为它会捕获所有异常,而不仅仅是XYZExceptions.这似乎是一种经常发生的模式.我知道我可以#pragma warning disable 0168用来抑制警告,但我真的没有找到一个非常优雅的解决方案.有没有更好的办法?

c# exception-handling visual-studio-2008

47
推荐指数
3
解决办法
1万
查看次数

如何防止C中的多个定义?

我是C新手,我只是想用Code :: Blocks编写一个控制台应用程序.这是(简化)代码:main.c:

#include <stdio.h>
#include <stdlib.h>
#include "test.c" // include not necessary for error in Code::Blocks

int main()
{
    //t = test(); // calling of method also not necessary
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

test.c的:

void test() {}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建此程序时,它会出现以下错误:

*path*\test.c|1|multiple definition of `_ test'|
obj\Debug\main.o:*path*\test.c|1|first defined here|

我没有办法多次定义测试(尽管我不知道下划线的来源)并且似乎不太可能将定义以某种方式包含两次.这是所有代码.

我已经排除了这个错误是由于某些命名冲突与其他函数或文件被称为test或test.c. 请注意,多个和第一个定义位于同一文件的同一行.

有谁知道造成这种情况的原因以及我能做些什么呢?谢谢!

c multiple-definition-error

39
推荐指数
5
解决办法
14万
查看次数

如何组织包(并防止依赖循环)?

我一直在我的Java项目上运行一些指标,显然包之间有很多依赖循环.我真的不知道如何将东西组织成包裹,所以我只是做了对我有意义的事情,这显然是错误的.

我的项目是一个神经网络框架.神经网络具有神经元,它们通过连接相互连接.他们需要相互依赖.然而,也有不同类型的神经元,所以我认为将它们全部放在自己的'神经元'包中是个好主意.显然,Connection不是神经元,所以它不应该在包中,但由于它们彼此引用,我现在有一个循环依赖.

这只是一个例子,但我有更多这样的情况.你如何处理这些情况?

另外,我读到包层次结构中更高层的包中的类不应该引用更深层的包中的类.这意味着包'nn'中的NeuralNetwork类不能引用包'nn.neurons'中的Neuron.你们遵循这个原则吗?如果我将NeuralNetwork转移到'nn.networks'或其他什么怎么办?在这种情况下,它将指代一个兄弟包而不是一个孩子.这是更好的做法吗?

java dependencies packages project-organization

28
推荐指数
5
解决办法
2万
查看次数

您可以在Eclipse中定义自己的模板变量吗?

在Eclipse中,有一些模板可以通过自动插入一些代码或注释来帮助您.您可以通过首选项> Java>编辑器>模板自行编辑这些模板.您可以使用所谓的"模板变量"来使这些模板更加智能.

例如,有一个$ {see_to_overridden}变量将"@see my.package.name.SpuerclassName#methodName(int,my.other.package.SomeType,...)"插入到javadoc注释中.如果我可以定义自己的变量,那将是非常好的,这样我就可以获得Superclassname,SomeType等,而不会在其前面加上"@see"的东西,这样我就可以链接到相应的方法.似乎没有模板变量,所以我想知道是否有任何方法可以创建自己的模板变量.

java eclipse templates

22
推荐指数
1
解决办法
8985
查看次数

从Windows命令行调用jar文件时,System.out无法正常工作

我有这门课:

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用Eclipse的"Export to runnable JAR"函数将其转换为可执行的jar文件(test.jar).当我在Eclipse中运行这个程序时,它打印出"Hello World!",但是当我从命令行调用jar文件时,没有任何反应.

我试过像这样调用jar文件:

test.jar
test.jar -jar
Run Code Online (Sandbox Code Playgroud)

没有任何输出.

我有另一个程序也有副作用(除了输出到stdout),并且正在执行副作用(告诉我jar文件肯定已执行),同样没有给命令行输出.我也尝试过使用stderr,但这没什么区别.有谁知道我怎么做这个工作?

谢谢!

java eclipse jar executable-jar

13
推荐指数
2
解决办法
2万
查看次数

在使用LaTeX Beamer逐项列出期间,我可以进入另一个框架吗?

基本上我想做这样的事情:

\begin{frame}{Frame 1}
  \begin{itemize}
    \item A \pause
    \item B \pause
    \item C \pause
    \showsubframe
    % continue here
    \item D \pause
    \item E \pause
  \end{itemize}
\end{frame}

\begin{frame}{Subframe} % only show this during Frame 1, not also after
   % something to help explain point C from Frame 1
\end{frame}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在另一帧中显示一帧?此外,我想我必须在某处定义子帧(例如在主帧之后)并且我不想在主帧之后再次显示它.

谢谢你的时间!

latex beamer

8
推荐指数
1
解决办法
5359
查看次数

独特的排列,没有镜像或循环重复

一些背景:我正在编写或多或少的强力搜索算法来解决我遇到的问题.为了做到这一点,我需要生成并评估所有可能性,以找出哪个是最好的.由于评估实际上需要一些时间,我宁愿尽可能少地生成完全覆盖我的搜索空间的解决方案.此外,我可以做的更多元素越多越好.对于任何数字K,通常有K!对于高于~10的数字,排列和生成它们都很难.

真正的问题:搜索空间应包含两个元素的所有排列(N次el1和M乘以el2,其中K = M + N),具有以下限制:

  1. 他们必须是独一无二的(即我只想要[aabbb]一次)
  2. 我不需要任何排列的反转(即如果我有[aab],我也不需要[baa])
  3. 我认为排列是圆形的,所以[aab] = [aba] = [baa]

如果我能够做到这一点,可能性的数量将大大减少.由于理想情况下K很大,因此首先生成所有排列然后根据这些标准过滤它们是不可行的.我已经完成了第一个限制(见下文),它将Matlab的正常排列函数(perms)的数量从2 ^ K减少到K!/ N!M !,这是一个巨大的胜利.第二个限制只会将可能性的数量减少一半(在最好的情况下),但我认为第三个也应该能够真正减少可能性的数量.

如果有人知道怎么做,最好还有如何计算会有多少种可能性,这对我有很大的帮助!我更喜欢解释,但代码也很好(我可以读C语言,Java(脚本),Python,Ruby,Lisp/Scheme).


对于感兴趣的:这是迄今为止我只获得唯一排列的算法:

function genPossibilities(n, m, e1, e2)
     if n == 0
         return array of m e2's
     else
         possibilities = genPossibilities(n-1, m, e1, e2)
         for every possibility:
             gain = number of new possibilities we'll get for this smaller possibility*
             for i in max(0,(m+n-gain))
                 if possibility(i) is not e1
                     add possiblity with e1 inserted in position i
         return new possibilities
Run Code Online (Sandbox Code Playgroud)
  • 如果您有N-1和M的所有排列,那么您可以使用它们通过将e1插入其中来查找N和M的排列.你不能只是在任何地方插入,因为那样你就会得到重复.我不知道为什么会这样,但你可以计算出你从旧的可能性中产生的新可能性的数量(我称之为"增益").对于第一个旧排列,该数字从M + 1开始,并且对于每个旧排列减少一个,直到它变为零,此时它返回到M等等(仅当M> = …

algorithm permutation combinatorics necklaces

7
推荐指数
1
解决办法
4359
查看次数

为什么我绝对不能将"程序入口点放在dll中"?

我有一个非常模糊的问题,但我希望有人可以提供帮助.我正在修改一个C++项目,昨天它仍在工作,但今天它不是.我很确定我没有改变任何东西,但是要完全确定我再次从SVN检查项目,我甚至还原到以前的系统还原点(因为这是一台工作计算机,它有时会秘密安装更新等. ).在成功编译之后,程序可以启动,但在我与它交互后,我收到此错误: 程序入口点?methodName @ className @@ UAEXXZ无法位于动态链接库libName.dll中.

我搜索过互联网,但大多数人的问题似乎都是由旧版DLL使用引起的.我搜索了我的电脑,没有旧版本.如果我删除了正确的版本,则应用程序无法启动.如果我然后重新编译项目,再次创建DLL,所以我非常确定应用程序正在使用正确的DLL并且编译正在创建它.如果我在错误引用的方法中引入语法错误,项目拒绝编译,所以我猜这意味着它也在编译包含该方法的文件.

基本上我对DLL,链接等一无所知所以如果有人知道为什么项目中非常明确定义的函数突然不再进入DLL了,我会非常感激. .我知道这很模糊,如果需要更多信息,我很乐意提供.谢谢!

更新:我已经尝试了给定的建议,但我仍然卡住了.__declspec(dllexport)显然没有在整个项目中使用.使用Dependency Walker打开DLL会显示一个空的右上角部分,下面的部分列出了错误消息中的函数.如果我检查Undecorate C++ Functions它看起来很好,但是如果我不这样做,我会从错误消息中得到奇怪的问号和@s,并且最后看起来有区别:

?methodName@className@@UAEXXZ
?methodName@className@@UAEXH@Z
Run Code Online (Sandbox Code Playgroud)

也许这就是问题,但我不知道这意味着什么,可能是什么导致了这个以及我能做些什么呢.

c++ dll visual-c++-2008-express

6
推荐指数
2
解决办法
3万
查看次数