鱼C论坛

 找回密码
 立即注册
查看: 4543|回复: 11

如何定义及取用分块儿矩阵

[复制链接]
发表于 2017-2-28 14:50:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
是这样的,我想编程实现潮流计算,里面需要定义节点导纳矩阵,这个矩阵是一个对角矩阵,对角线上的每一个元素都是一个导纳矩阵,我需要对每一个矩阵进行赋值以及后期的调用,请问怎么才能做到呢?先谢谢各位大佬了~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-28 19:27:10 | 显示全部楼层
去学习一下scipy文档。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-2-28 20:16:55 | 显示全部楼层
怎么获得鱼币啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-28 21:21:45 | 显示全部楼层
6666666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-28 22:58:45 | 显示全部楼层
whl19910402 发表于 2017-2-28 19:27
去学习一下scipy文档。

是这样的,我想的方法是先定义一个b*b(b是支路数,也就是后面非零矩阵数)的空矩阵,矩阵内的元素为随机数,然后定义b个3*3的非零矩阵并进行赋值,用这些非零矩阵依次代替空矩阵中国对角线上的元素,一个元素被一个矩阵代替,其它元素用3*3的全零矩阵代替,这样就形成了一个b*b的阻抗矩阵,其中的每一个元素都是一个矩阵。但是出现了一个问题,以下是我的代码:
import numpy
b = input('请输入支路数:')
b = int(b)
Z = numpy.empty((b,b))
for i in range(b):
    a = numpy.empty((3,3))
    for j in range(3):
        for l in range(3):
            print('请输入第',j,'行第',l,'列数据:')
            tempt = input('输入:')
            a[j][l] = float(tempt)
    for k in range(b):
        if k == i:
            Z[i][k] = a
        else:
            Z[i][k] = numpy.zeros((3,3))
在执行“ for k in range(b):
        if k == i:
            Z[i][k] = a”时报错,说是“ValueError: setting an array element with a sequence.”
请问能有什么办法解决这个嘛?我看了一下scipy,好像大部分是讲稀疏矩阵的,其元素还是单个数吧?谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-1 12:18:31 | 显示全部楼层
去学习numpy数组应用的基础知识
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-1 14:44:10 | 显示全部楼层
大众仇人 发表于 2017-2-28 22:58
是这样的,我想的方法是先定义一个b*b(b是支路数,也就是后面非零矩阵数)的空矩阵,矩阵内的元素为随机 ...

组合矩阵可以学习pandas模块,里面有拼接方法。
你要想修改你的函数可以这么考虑,Z矩阵3d*3d 根据序号赋值即可
    for k in range(3):
        for j in range(3):
            m = j + i * 3
            n = k + i * 3
            Z[n, m] = a[k, j]
把写入Z改成这样试试,我只是目测可能有错误,提供个思路。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-3-1 21:56:07 | 显示全部楼层
whl19910402 发表于 2017-3-1 14:44
组合矩阵可以学习pandas模块,里面有拼接方法。
你要想修改你的函数可以这么考虑,Z矩阵3d*3d 根据序号 ...

谢谢大神,已经解决了~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-1 21:57:11 | 显示全部楼层
SixPy 发表于 2017-3-1 12:18
去学习numpy数组应用的基础知识

嗯嗯,好的,谢谢提醒~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-1 22:00:58 | 显示全部楼层
总结:
        感谢各位鱼油的帮助,已经解决了这个问题
  1. import numpy
  2. b = input('请输入支路数:')
  3. b = int(b)
  4. Z = [[[[0 for l in range(3)] for m in range(3)] for i in range(b)] for j in range(b)]
复制代码

用上述代码就可以实现我所说的b*b矩阵,矩阵的每一个元素是3*3矩阵了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 07:53:57 | 显示全部楼层
大众仇人 发表于 2017-3-1 22:00
总结:
        感谢各位鱼油的帮助,已经解决了这个问题

np.zeros((3,3,3,3),np.int32)

不用那么罗嗦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 11:44:47 | 显示全部楼层
SixPy 发表于 2017-3-2 07:53
np.zeros((3,3,3,3),np.int32)

不用那么罗嗦~

学到了,谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-25 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表