我有一个简单的一维Python数组,随机数.我想要做的是将其转换为特定形状的numpy Matrix.我目前的尝试看起来像这样:
randomWeights = []
for i in range(80):
randomWeights.append(random.uniform(-1, 1))
W = np.mat(randomWeights)
W.reshape(8,10)
Run Code Online (Sandbox Code Playgroud)
不幸的是,它总是创建一个形式的矩阵:
[[random1,random2,random3,...]]
因此,只使用一个维度的第一个元素,并且reshape命令无效.有没有办法将1D数组转换为矩阵,以便前x个项目将是矩阵的第1行,接下来的x项目将是第2行,依此类推?
基本上这将是预期的形状:
[[1, 2, 3, 4, 5, 6, 7, 8],
[9, 10, 11, ... , 16],
[..., 800]]
Run Code Online (Sandbox Code Playgroud)
我想我总是可以通过解析输入数组手动构建一个所需形式的新矩阵.但我想知道是否有一个更简单,更优雅的解决方案,内置函数我没有看到.如果我必须手动构建这些矩阵,我将在代码的其他区域进行大量的额外工作,因为我的所有源数据都来自简单的1D数组,但将作为矩阵计算.
在我的程序中,我正在使用不同大小的各种numpy数组.我需要将它们存储到XML文件中以供以后使用.我没有将它们写入二进制文件,因此我将所有数据放在一个地方(XML文件)而不是分散在200个文件中.
所以我尝试使用numpy的array_str()方法将数组转换为String.生成的XML如下所示:
-<Test date="2013-07-10-17:19">
<Neurons>5</Neurons>
<Errors>[7.7642140551985428e-06, 7.7639131137987232e-06]</Errors>
<Iterations>5000</Iterations>
<Weights1>[[ 0.99845902 -0.70780512 0.26981375 -0.6077122 0.09639695] [ 0.61856711 -0.74684913 0.20099992 0.99725171 -0.41826754] [ 0.79964397 0.56620812 -0.64055346 -0.50572793 -0.50100635]]</Weights1>
<Weights2>[[-0.1851452 -0.22036027] [ 0.19293429 -0.1374252 ] [-0.27638478 -0.38660974] [ 0.30441414 -0.01531598] [-0.02478953 0.01823584]]</Weights2>
</Test>
Run Code Online (Sandbox Code Playgroud)
权重是我想要存储的值.现在问题是numpy的fromstring()方法显然不能重新加载这些......我得到"ValueError:字符串大小必须是元素大小的倍数"
我用"np.array_str(w1)"编写它们并尝试用"np.fromstring(w_str1)"读取它们.显然结果只是一维数组,即使它工作,所以我必须手动恢复形状.呃,这已经是一种痛苦,因为我也必须以某种方式存储它.
这样做的最佳方法是什么?最好还可以保存我的阵列的形状和数据类型,而不需要手动管理每个小东西.
我试图在Antlr4的帮助下用Java编写代码转换器,并且到目前为止在语法部分取得了很大的成功.然而,现在我正在把我的脑袋撞到围绕解析树数据结构的墙上,我需要在解析输入后进行处理.
我正在尝试使用访问者模板来查看我的解析树.我将向您展示一个例子来说明我的困惑点.
我的语法:
grammar pqlc;
// Lexer
//Schlüsselwörter
EXISTS: 'exists';
REDUCE: 'reduce';
QUERY: 'query';
INT: 'int';
DOUBLE: 'double';
CONST: 'const';
STDVECTOR: 'std::vector';
STDMAP: 'std::map';
STDSET: 'std::set';
C_EXPR: 'c_expr';
INTEGER_LITERAL : (DIGIT)+ ;
fragment DIGIT: '0'..'9';
DOUBLE_LITERAL : DIGIT '.' DIGIT+;
LPAREN : '(';
RPAREN : ')';
LBRACK : '[';
RBRACK : ']';
DOT : '.';
EQUAL : '==';
LE : '<=';
GE : '>=';
GT : '>';
LT : '<';
ADD : '+';
MUL : '*';
AND : '&&';
COLON …Run Code Online (Sandbox Code Playgroud) 请耐心等待我不是编码专家.
我使用ANTRWorks 2在ANTLR4中构建了一个语法.我用各种测试字符串测试了语法,它在那里工作得很好.现在我遇到的麻烦就是在我自己的代码中使用生成的词法分析器和解析器.作为代码生成目标,我正在使用Java.
这是我正在尝试的代码:
String s = "query(std::map .find(x) == y): bla";
ANTLRInputStream input = new ANTLRInputStream(s);
TokenStream tokens = new CommonTokenStream(new pqlcLexer(input));
pqlcParser parser = new pqlcParser(tokens);
ParseTree tree = parser.query();
System.out.println(tree.toStringTree());
Run Code Online (Sandbox Code Playgroud)
输出只是"查询",这是我的起始规则.我希望类似于ANTLRworks的输出:"(query(quant_expr query((match std :: map.find((cm x))==(cm(number 256)))):( query(qexpr bla)) ))"这是树的视觉:http://puu.sh/94Nlx/00dc35bb05.png
我必须调用哪些方法才能获得正确的语法树作为输出?
以下是生成的Parser供参考:http://pastebin.com/Lb34TyRW和语法:
// Lexer
//Schlüsselwörter
EXISTS: 'exists';
REDUCE: 'reduce';
QUERY: 'query';
INT: 'int';
DOUBLE: 'double';
CONST: 'const';
STDVECTOR: 'std::vector';
STDMAP: 'std::map';
STDSET: 'std::set';
INTEGER_LITERAL : (DIGIT)+ ;
fragment DIGIT: '0'..'9'; …Run Code Online (Sandbox Code Playgroud)