如何在numpy中创建反对角矩阵?我肯定可以手动完成,但是如果它有功能则很好奇。
我正在寻找一个矩阵,从左下角到右上角,其他地方都是零。
答案 0 :(得分:5)
使用np.eye(n)[::-1]
生成:
array([[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 1., 0., 0., 0., 0.]])
代表n=5
答案 1 :(得分:2)
一种方法是翻转矩阵,计算对角线,然后再次翻转它。
numpy中的numberfields
函数要么从矩阵中提取对角线,要么从数组中构建对角矩阵。您可以使用它两次来获得对角矩阵。
所以你会有这样的事情:
@EnableTransactionManagement
@PropertySource("classpath:props.dbProps.properties")
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(DRIVER));
dataSource.setUrl(env.getRequiredProperty(URL));
dataSource.setUsername(env.getRequiredProperty(USER_NAME));
dataSource.setPassword(env.getRequiredProperty(PASSWORD));
return dataSource;
}
@Bean
public LocalSessionFactoryBean getSessionFactory(){
final LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean();
lsfb.setDataSource(dataSource());
lsfb.setPackagesToScan(env.getRequiredProperty(SCAN));
lsfb.setHibernateProperties(hibProps());
return lsfb;
}
@Bean
public PlatformTransactionManager transactionManager(){
HibernateTransactionManager tx = new HibernateTransactionManager();
tx.setSessionFactory(getSessionFactory().getObject());
return tx;
}
private Properties hibProps(){
Properties p = new Properties();
p.put(DIALECT, env.getRequiredProperty(DIALECT));
p.put(SHOW_SQL, env.getRequiredProperty(SHOW_SQL));
p.put(HBM2DLL, env.getRequiredProperty(HBM2DLL));
return p;
}
我不确定做这一切的效率如何。
这是一个反对角矩阵,而不是单位矩阵的翻转版本。
如果您想要翻转版本的单位矩阵,只需在@Configuration
@EnableTransactionManagement
public class HibernateConfig {
@Autowired
private ApplicationContext context;
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setConfigLocation(context.getResource("classpath:hibernate.cfg.xml"));
factoryBean.setAnnotatedClasses(User.class);
return factoryBean;
}
@Bean
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}
}
的输出上调用np.fliplr()
即可。例如:
np.diag()