NumPy的。通过添加行创建矩阵时出现问题

时间:2016-12-03 13:46:37

标签: python numpy

我想通过添加行来构建矩阵,从:

开始
enter_definition=setText(dico.RechercherMot(mot))

得到:

                //JOptionPane.showMessageDialog(null,"votre mot a été trouvé avec succès ","reussite",JOptionPane.INFORMATION_MESSAGE);


            }
    }                                       

    private void entrer_motActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:

    }                                          

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(RechercherMot.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(RechercherMot.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(RechercherMot.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(RechercherMot.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new RechercherMot().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JTextArea entrer_definition;
    private javax.swing.JTextField entrer_mot;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton valider;
    // End of variables declaration                   
}





//management function code




 public void RechercherMot(String mot){
        String ret="select * from dictionnaire where mot=?";
           try {
            PreparedStatement ps = (PreparedStatement) ConnectionDico.getCon().prepareStatement(ret);

            ps.setString(1,mot);
            //execution
           ResultSet resultat= ps.executeQuery();
           while(resultat.next()){
               System.out.println("mot = " +resultat.getString("mot")+" "+"definition = "+resultat.getString("definition")+" ");
               JOptionPane.showMessageDialog(null,"votre mot a été trouvé avec succès et sa définition est la suivante:\n"+" mot = " +resultat.getString("mot")+" "+"/ definition = "+resultat.getString("definition")+" ","reussite",JOptionPane.INFORMATION_MESSAGE);
           }
        } catch (SQLException ex) {
            Logger.getLogger(GestionDico.class.getName()).log(Level.SEVERE, null, ex);
             JOptionPane.showMessageDialog(null, "le mot n'a pas été retrouvé dans le dictionnaire", "Erreur", JOptionPane.ERROR_MESSAGE);
        }

    }
}

使用此代码:

[ 5 20 31 32 36  3 10 25 27 40]
[ 3 10 25 27 40 18 19 20 40 41]
[18 19 20 40 41  6 22 26 29 48]
[ 6 22 26 29 48  8 11 23 27 35]

print(row.shape)返回(10,)。我尝试使用row.T但它也失败了。 你有什么建议吗?

非常感谢! 再见 法比奥

2 个答案:

答案 0 :(得分:1)

根据docs

  

必须具有正确的形状(与arr形状相同,不包括轴)。如果未指定axis,则值可以是任何形状,并在使用前展平。

尝试添加方括号:

arr = np.append(arr, [row], axis=0)

在这种情况下,arr[row]的维度数量将相同。

答案 1 :(得分:0)

从您的开始的复制粘贴开始

In [418]: vstr = """[[5 20 31 32 36  3 10 25 27 40]
     ...: [3 10 25 27 40 18 19 20 40 41]
     ...: [18 19 20 40 41  6 22 26 29 48]
     ...: [6 22 26 29 48  8 11 23 27 35]]"""
In [420]: vstr=','.join(vstr.split())
In [421]: vstr
Out[421]: '[[5,20,31,....]]'
In [422]: vlist=json.loads(vstr)
In [423]: vlist
Out[423]: 
[[5, 20, 31, 32, 36, 3, 10, 25, 27, 40],
 [3, 10, 25, 27, 40, 18, 19, 20, 40, 41],
 [18, 19, 20, 40, 41, 6, 22, 26, 29, 48],
 [6, 22, 26, 29, 48, 8, 11, 23, 27, 35]]

我现在有一份清单。

将其转换为数组的最简单方法是将其传递给np.array

In [424]: arr=np.array(vlist)
In [425]: arr
Out[425]: 
array([[ 5, 20, 31, 32, 36,  3, 10, 25, 27, 40],
       [ 3, 10, 25, 27, 40, 18, 19, 20, 40, 41],
       [18, 19, 20, 40, 41,  6, 22, 26, 29, 48],
       [ 6, 22, 26, 29, 48,  8, 11, 23, 27, 35]])

如果这些子列表的来源是某个过程,请执行

alist=[]
for line in vlist:
    alist.append(line)
arr = np.array(alist)

使用数组append是可能的,但速度较慢,您必须小心尺寸。 append只是concatenate,它接受​​2个参数,并确保它们至少为1d。它真的意味着在数组的末尾添加一个值。

如果使用逐行连接,您应该采取以下措施:

arr = np.empty((0,10),int)
for line in vlist:
    arr = np.concatenate([arr, np.atleast_2d(line)],axis=0)

arr = np.append(arr, np.atleast_2d(line), axis=0)也有效,但模糊了基本细节。 arr = np.vstack((arr, line))也是如此。还有其他方法可以将line转换为所需的2d数组。 [line]建议的@SphDev是另一个。