在python中如何定义这样的空矩阵?

lp_grace 2014-02-21 06:24:23

def checkMat(aMat)
bMat = [] #这是matlab中的定义方式
for i in range(aMat.shape[1]):
if aMat[i,] == ... #满足一条件
bMat = concatenate((bMat,aMat[i,]))
return bMat

python 中有类似的bMat的空矩阵的定义方式吗,empty()函数因为随机填充了值,所以不适合
...全文
2857 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2014-02-21
  • 打赏
  • 举报
回复
python用append.
In [279]: def checkMat(aMat):
     ...:     bMat = []
     ...:     for row in aMat:
     ...:         if sum(row) > 0:
     ...:           bMat.append(row)
     ...:     return bMat

In [280]: aMat = [[0, 1, 0], [1, -2, 0], [0, 0, 0]]

In [281]: checkMat(aMat)
Out[281]: [[0, 1, 0]]
更方便的是用list comprehension:
In [282]: [row for row in aMat if sum(row) > 0]
Out[282]: [[0, 1, 0]]
如果你希望按列取的话, numpy应该支持按列取或增加一列. 如果你是做数值计算的话,建议使用numpy. 如果是简单的应用,不想依赖于numpy,可以先把矩阵转置,对行处理,再转置回去.
In [283]: def checkColumn(aMat):
     ...:     tranpose = zip(*aMat)
     ...:     bMat = [row for row in tranpose if sum(row)>0]
     ...:     return zip(*bMat)

In [284]: checkColumn(aMat)
Out[284]: [(0,), (1,), (0,)]
写在一行也不算长(可读性如何就见仁见智了):
In [285]: zip(*(row for row in zip(*aMat) if sum(row) > 0))
Out[285]: [(0,), (1,), (0,)]

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧