我没有在Matlab之外做太多编码,但我需要将我的Matlab代码导出到另一种语言,很可能是C.我的Matlab代码包括一个直方图函数histc(),它放置我的输入数据(这是双-precision,而不是整数)到指定的bin数组中,以形成直方图.
我确信我可以拼凑几个嵌套循环来生成直方图函数,但是我需要这个函数快速且内存很轻,因为它将被重复且经常访问.
为了避免重新发明轮子,任何人都知道C语言是否有任何现有的直方图功能可供使用,或者是否需要这样的人通常自己创建它?
有人知道创建直方图的有效算法吗?伪代码很好.
提前致谢.
我想知道是否有人可以将我推荐给ANSI C中的一维线性卷积代码片段而不是重新发明轮子?我在谷歌搜索和堆栈溢出,但在CI中找不到任何东西可以使用.
例如,对于阵列A,B,和C中,所有双精度,其中A和B是输入端,C是输出,具有长度len_A,len_B和len_C = len_A + len_B - 1分别.
我的阵列尺寸很小,因此不需要通过FFT实现快速卷积的任何速度增加.寻找直接的计算.
我有一个包含两个文件的ANSI C程序.第一个文件包含该main()函数,第二个文件包含第一个文件调用的其他函数.在main()函数定义之前,我已经放置了以下代码:
#define PI 3.14159265358979323846
Run Code Online (Sandbox Code Playgroud)
但第二个文件没有看到这个变量.第一个文件看起来很好.然后,我将相同的行放在第二个文件中(同时将其保存在上面的第一个文件中),在函数定义之前,但仍然没有第二个文件看到它.事情总是很好地编译,但是当在gdb中跟踪变量PI时,它会显示出来"No symbol "PI" in current context."
如何使PI成为应用程序中编译的所有文件的全局常量可查看器?
编辑/更新:
根据到目前为止的响应,我创建了以下文件:
myheader.h
#ifndef my_header_stuff
#define my_header_stuff
#define PI 3.1415926535897932384626433832795
#endif
Run Code Online (Sandbox Code Playgroud)
在我希望看到这个常量PI的两个文件中,我已经包含了这个文件,如下所示:
在file1.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
int main(void) {
etc...
}
Run Code Online (Sandbox Code Playgroud)
和file2.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
double interesting_function(void) {
etc...
}
Run Code Online (Sandbox Code Playgroud)
问题:
当我使用GDB进行调试时,b PI返回(在两个文件中,相同的结果)"当前上下文中的"无符号"PI".但是,正确计算取决于PI的数学运算.有没有办法在gdb中查看PI?
我还可以在myheader.h文件中包含stdio和stdlib的两行吗?
我还可以在myheader.h文件中包含任何函数原型吗?如果我这样做,然后让我说我创建一个不需要任何这些原型的file3.c,因为它不使用这些功能,是否有任何伤害?
我是java的新手,我不熟悉错误堆栈跟踪在抛出并随后显示给我的Web应用程序的最终用户时使用的格式规则.
我对Oracle数据库的经验是错误堆栈包含内部信息,例如模式和过程名称以及行号,虽然对调试很有用,但我希望阻止用户查看.这是一个例子:
java.sql.SQLException : ORA-20011: Error description here
ORA-07894: at "NAME_OF_SCHEMA.PROCEDURE_NAME", line 121
ORA-08932: at line 10
Run Code Online (Sandbox Code Playgroud)
我要向用户显示的字符串是Error description here.我可以使用正则表达式提取此字符串,因为我知道(1)此字符串始终位于第一行,因此我可以提取错误堆栈跟踪的第一行,以及(2)此字符串始终以Error结束开头并以结尾结束这条线.[注意Oracle用户(我不想误导你):以上仅适用于使用RAISE_APPLICATION_ERROR且错误字符串开头的情况Error,否则文本Error不存在].
我对Java的问题是:
(1)您是否有任何潜在的敏感信息,您不希望用户在错误堆栈中看到?如果是这样,什么?例如,文件路径,服务器名称/ IP等.
(2)我是否可以依赖Java错误堆栈跟踪的格式规则来提取非敏感信息?或者,其他人如何解决这个问题呢?
更新1:
感谢所有回复,他们一直非常有帮助.虽然许多人评论使用诸如getUserFriendlyMessage()将错误映射到有用的用户消息之类的功能,但我想知道是否有人可以扩展此映射.也就是说,对于常见错误(SQL,I/O等),可以使用什么"可靠"标识符来搜索此错误堆栈以识别发生的错误类型,然后推荐相应的文本字符串映射到此错误消息以显示给用户?@ Adarshr的回复是一个好的开始.例如,
Identified Expected If found in error stack, display this friendly msg to user
------------------- ----------------------------------------------------------
SQLException An error occurred accessing the database. Please contact support at support@companyname.com.
IOException Connection error(?). Please check your internet connection.
Run Code Online (Sandbox Code Playgroud)
假设编译相关的错误不需要解决,而是关注最终用户在正常使用期间可能遇到的错误.作为参考,这是一个运行时错误消息列表:http://mindprod.com/jgloss/runerrormessages.html#IOEXCEPTION
或者,是否可以使用堆栈跟踪的第一行显示给用户?这个链接就像我在上面的原始问题中所获得的那样:
http://www3.ntu.edu.sg/home/ehchua/programming/howto/ErrorMessages.html
例如,如果Exception …
我不是DSP专家,但据我所知,有两种方法可以将离散时域滤波器应用于离散时域波形.第一种是在时域中对它们进行卷积,第二种是对两者进行FFT,将两个复数谱相乘,并对结果进行IFFT.这些方法的一个关键区别是第二种方法受循环卷积的影响.
例如,如果滤波器和波形都是N点长,则第一种方法(即卷积)产生的结果是N + N-1点长,其中该响应的前半部分是滤波器填满和第二一半是过滤器排空.为了获得稳态响应,滤波器需要的点数少于要滤波的波形数.
使用第二种方法继续该示例,并假设离散时域波形数据全部是真实的(不复杂),滤波器的FFT和波形都产生N点长的FFT.将两个频谱相乘IFFT,结果产生时域结果,N点长.这里过滤器填满和空的响应在时域中相互重叠,并且没有稳态响应.这是循环卷积的效果.为了避免这种情况,通常滤波器尺寸将小于波形尺寸,并且两者都将是零填充的,以允许频率卷积的空间在两个频谱的乘积的IFFT之后及时扩展.
我的问题是,我经常看到来自知名专家/公司的文献中的工作,他们有离散(实际)时域波形(N点),他们对它进行FFT,将其乘以某个滤波器(也是N点),和IFFT后续处理的结果.我天真的想法是这个结果应该不包含稳态响应,因此应该包含过滤器填充/清空中的工件,这些工件会导致解释结果数据时出错,但我必须遗漏一些东西.在什么情况下这是一种有效的方法?
任何见解将不胜感激
在Steven Prata的书"C Primer Plus"中,有一个关于类型转换的部分,其中"基本规则"部分已在规则1中说明:
Under K&R C, but not under current C, float is automatically converted to double.
Run Code Online (Sandbox Code Playgroud)
http://www.9wy.net/onlinebook/CPrimerPlus5/ch05lev1sec5.html
有人可以解释是什么but not under current C意思?是否有自动转换的C版本和不自动转换的版本?
我正在尝试理解,如果我有一个混合浮点数和双精度数的表达式,我可以依靠C来推广浮点数,当它被评估时加倍吗?
我的linux电子邮件服务器exim有一个自签名证书.为了使我的Java函数能够通过GlassFish访问这个电子邮件服务器,我最初发布了:
# keytool -importcert -v -noprompt -alias mail.mycompany.com -file /path/to/mail.mycompany.com.der -keystore /path/to/config/cacerts.jks -storepass changeit
Certificate was added to keystore
Run Code Online (Sandbox Code Playgroud)
这很好,直到证书过期.我不得不创建一个新的自签名证书,现在Java给出了错误PKIX path validation failed … path does not chain with any of the trust anchors.
为了解决这个问题,我mail.mycompany.com.der从新的exim证书中派生了一个新文件(最初完成).但是当我发出上面的keytool命令(最初完成)时,它会给出错误Certificate not imported, alias <mail.mycompany.com> already exists.
我认为问题是我不能使用相同的keytool命令.我需要使用另一个不将证书添加到密钥库的证书,但是使用更新版本更新已经存在的证书.任何人都可以指出我正确的指挥方向吗?
顺便说一句,是否有一些我缺少的自动化流程?也就是说,cert一直过期......这是否意味着IT管理员需要始终使用这样的代码手动使用新证书更新密钥库?或者,这可以以某种方式自动化吗?
我发现通过参考方法使用ActionScript的数组赋值并不熟悉.我理解它在做什么,但我发现用这种方法管理很多数组会让人感到困惑.是否有一种简单的方法来处理ActionScript数组,其中数组赋值是通过VALUE而不是REFERENCE?例如,如果我想在将来永远分配oneArray给twoArray两个数组而不是将它们连接起来,那该怎么做呢?这会有用吗?
var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array(3);
for (ii=0; ii<3; ii++) { twoArray[ii] = oneArray[ii]; }
Run Code Online (Sandbox Code Playgroud)
目的是能够在twoArray不看到变化的情况下进行更改oneArray.
有关如何通过VALUE而不是REFERENCE分配数组的任何建议吗?
- - 以供参考 - -
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html
数组赋值是通过引用而不是值.将一个数组变量分配给另一个数组变量时,两者都引用相同的数组:
var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array = oneArray; // Both array variables refer to the same array.
twoArray[0] = "z";
trace(oneArray); // Output: z,b,c.
Run Code Online (Sandbox Code Playgroud) 我有一个过程,其中只要该表中至少存在一行,在应用程序服务器中运行的程序必须访问Oracle数据库服务器中的表.每行数据涉及请求由程序执行某些数字运算的客户端.该程序只能串行执行此数字运算(即,一次对一个客户端而不是并行运行多个客户端).
因此,需要告知程序何时数据库中有数据可供处理.我也可以
问题1:有没有传统观点为什么一种方法可能比另一种方法更好?
问题2:我想知道程序是否有任何问题"一次运行"几个月(服务器中的任何进程是否会停止或破坏程序运行? - 如果是这样我不知道如何学习有一个问题,除非愤怒的客户).任何人都有在服务器上运行程序很长时间没有问题的经验?或者,如果服务器崩溃,有没有办法在服务器重新启动后自动启动它(即C语言可执行文件)程序,因此不需要人专门启动它?
任何建议表示赞赏
更新1:客户端正在等待结果,但是几秒钟的额外延迟(来自轮询)不是交易破坏者.
我是Java的新手(我使用的是Java 6).我一直在使用以下设计模式为我的所有Java POJO和servlet通过GlassFish 3.1.2 Web服务器访问Oracle 11G数据库.
当所有可用进程(或会话,不确定区别是什么)被消耗时,我得到间歇性数据库错误(ORA-12519),这导致我以某种方式思考应用程序未发布进程.
查看下面的设计模式,是否有更好的方法可以确保在发生异常时释放与数据库的JDBC连接?例如,我是否还应该将if ( conn != null) conn.close();代码放在catch块中?或者,有更好的设计模式吗?提前感谢任何意见/提示.
public String MyFunction() throws Exception {
Connection conn;
CallableStatement cs;
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/MyPool");
conn = ds.getConnection();
cs = conn.prepareCall( "{call my_sproc (?)}" );
cs.registerOutParameter(1, Types.VARCHAR);
cs.execute();
String outParam = cs.getString(1);
if ( conn != null ) // close connection
conn.close();
} catch (Exception e) {
outParam = "an error occurred";
}
return outparam;
}
Run Code Online (Sandbox Code Playgroud) c ×4
java ×3
database ×2
oracle ×2
actionscript ×1
algorithm ×1
apache-flex ×1
c++ ×1
convolution ×1
fft ×1
fftw ×1
histogram ×1
jdbc ×1
keytool ×1
matlab ×1
security ×1
stack-trace ×1