小编ggk*_*ath的帖子

搜索快速/高效的直方图算法(带有预先指定的箱)

我没有在Matlab之外做太多编码,但我需要将我的Matlab代码导出到另一种语言,很可能是C.我的Matlab代码包括一个直方图函数histc(),它放置我的输入数据(这是双-precision,而不是整数)到指定的bin数组中,以形成直方图.

我确信我可以拼凑几个嵌套循环来生成直方图函数,但是我需要这个函数快速且内存很轻,因为它将被重复且经常访问.

为了避免重新发明轮子,任何人都知道C语言是否有任何现有的直方图功能可供使用,或者是否需要这样的人通常自己创建它?

有人知道创建直方图的有效算法吗?伪代码很好.

提前致谢.

c c++ algorithm matlab histogram

24
推荐指数
3
解决办法
4万
查看次数

ANSI C代码中的1d线性卷积?

我想知道是否有人可以将我推荐给ANSI C中的一维线性卷积代码片段而不是重新发明轮子?我在谷歌搜索和堆栈溢出,但在CI中找不到任何东西可以使用.

例如,对于阵列A,B,和C中,所有双精度,其中A和B是输入端,C是输出,具有长度len_A,len_Blen_C = len_A + len_B - 1分别.

我的阵列尺寸很小,因此不需要通过FFT实现快速卷积的任何速度增加.寻找直接的计算.

c convolution

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

如何在C程序中使全局常量(跨多个文件工作)?

我有一个包含两个文件的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)

问题:

  1. 当我使用GDB进行调试时,b PI返回(在两个文件中,相同的结果)"当前上下文中的"无符号"PI".但是,正确计算取决于PI的数学运算.有没有办法在gdb中查看PI?

  2. 我还可以在myheader.h文件中包含stdio和stdlib的两行吗?

  3. 我还可以在myheader.h文件中包含任何函数原型吗?如果我这样做,然后让我说我创建一个不需要任何这些原型的file3.c,因为它不使用这些功能,是否有任何伤害?

c

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

Java:我们通常不希望向用户显示错误堆栈跟踪中的哪些信息?

我是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 …

java security stack-trace

11
推荐指数
2
解决办法
2719
查看次数

为什么卷积结果在时域和频域中执行时有不同的长度?

我不是DSP专家,但据我所知,有两种方法可以将离散时域滤波器应用于离散时域波形.第一种是在时域中对它们进行卷积,第二种是对两者进行FFT,将两个复数谱相乘,并对结果进行IFFT.这些方法的一个关键区别是第二种方法受循环卷积的影响.

例如,如果滤波器和波形都是N点长,则第一种方法(即卷积)产生的结果是N + N-1点长,其中该响应的前半部分是滤波器填满和第二一半是过滤器排空.为了获得稳态响应,滤波器需要的点数少于要滤波的波形数.

使用第二种方法继续该示例,并假设离散时域波形数据全部是真实的(不复杂),滤波器的FFT和波形都产生N点长的FFT.将两个频谱相乘IFFT,结果产生时域结果,N点长.这里过滤器填满和空的响应在时域中相互重叠,并且没有稳态响应.这是循环卷积的效果.为了避免这种情况,通常滤波器尺寸将小于波形尺寸,并且两者都将是零填充的,以允许频率卷积的空间在两个频谱的乘积的IFFT之后及时扩展.

我的问题是,我经常看到来自知名专家/公司的文献中的工作,他们有离散(实际)时域波形(N点),他们对它进行FFT,将其乘以某个滤波器(也是N点),和IFFT后续处理的结果.我天真的想法是这个结果应该不包含稳态响应,因此应该包含过滤器填充/清空中的工件,这些工件会导致解释结果数据时出错,但我必须遗漏一些东西.在什么情况下这是一种有效的方法?

任何见解将不胜感激

signal-processing fft fftw

10
推荐指数
2
解决办法
4820
查看次数

C编程:当混合数据类型相乘时,float总是自动转换为double吗?

在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来推广浮点数,当它被评估时加倍吗?

c

10
推荐指数
2
解决办法
7374
查看次数

新手keytool命令 - 如何更新已添加到密钥库的证书?

我的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管理员需要始终使用这样的代码手动使用新证书更新密钥库?或者,这可以以某种方式自动化吗?

java keytool

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

ActionScript:如何通过VALUE而不是REFERENCE分配数组?

我发现通过参考方法使用ActionScript的数组赋值并不熟悉.我理解它在做什么,但我发现用这种方法管理很多数组会让人感到困惑.是否有一种简单的方法来处理ActionScript数组,其中数组赋值是通过VALUE而不是REFERENCE?例如,如果我想在将来永远分配oneArraytwoArray两个数组而不是将它们连接起来,那该怎么做呢?这会有用吗?

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)

apache-flex actionscript actionscript-3

8
推荐指数
2
解决办法
1728
查看次数

轮询数据库与从数据库触发程序?

我有一个过程,其中只要该表中至少存在一行,在应用程序服务器中运行的程序必须访问Oracle数据库服务器中的表.每行数据涉及请求由程序执行某些数字运算的客户端.该程序只能串行执行此数字运算(即,一次对一个客户端而不是并行运行多个客户端).

因此,需要告知程序何时数据库中有数据可供处理.我也可以

  1. 让程序轮询数据库,或
  2. 让数据库触发程序.

问题1:有没有传统观点为什么一种方法可能比另一种方法更好?

问题2:我想知道程序是否有任何问题"一次运行"几个月(服务器中的任何进程是否会停止或破坏程序运行? - 如果是这样我不知道如何学习有一个问题,除非愤怒的客户).任何人都有在服务器上运行程序很长时间没有问题的经验?或者,如果服务器崩溃,有没有办法在服务器重新启动后自动启动它(即C语言可执行文件)程序,因此不需要人专门启动它?

任何建议表示赞赏

更新1:客户端正在等待结果,但是几秒钟的额外延迟(来自轮询)不是交易破坏者.

database oracle

8
推荐指数
2
解决办法
8278
查看次数

Java/JDBC:发生异常时关闭数据库连接的最佳设计模式

我是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)

java database oracle jdbc

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