python动态数组实现_Python中的动态数组

我正在尝试从正方形列表“ m”中删除特定的行和列。刚开始,我像正方形矩阵“ m”一样使用正方形列表,并尝试使用numpy中的命令“ delete”,如下所示:

from numpy import*

import numpy as np

m=array([[1,2,3],[4,5,6],[7,8,9]])

#deleting row and column "0"

#x is the new matrix without the row and column "0"

x=np.delete((np.delete(m,0,0)),0,1)

print x

x=[[5,6],[8,9]]

命令“ delete”的问题是我不确定该命令是否可以迭代循环使用。具体来说,我想知道如何删除“ y”列表中的特定行和列:

m=([[1,2,3],[4,5,6],[7,8,9]])

y=[[1],[0],[1],[0]]

注意:如果数字“ 1”出现在列表“ y”中,则在列表“ m”中删除相应的行和列。

如果数字“ 1”出现在列表“ y”中,则删除列表“ m”中的相应行和列。例如,在这种情况下,数字“ 1”出现在位置“ 0”的列表“ y”中,我们需要删除列表“ m”中的第一行和第一列。这是列表“ y”中第一个出现的数字“ 1”的所需列表“ m”:

m=[[5,6],[8,9]]

注意:列表“ m”的大小已更改,现在为2x2。这是我的第一个问题,如何在Python中使用动态列表?如何指定新尺寸?

因为数字“ 1”再次出现在列表“ y”中,所以我们需要删除新列表“ m”中的相应行和列,在这种情况下,所需的列表“ m”为:m = [[5]]

我做了很多尝试,从这个论坛上获得了这个技巧(使用理解列表的另一种方式):

#row to delete

roww=0

#column to delete

column=0

m=([[1,2,3],[4,5,6],[7,8,9]])

a=[j[:column]+j[column+1:] for i,j in enumerate(m) if i!=roww]

print a

注意:我不知道如何在python中使用动态数组,因为我需要一些帮助。有人认为这是一种功课,但却是个谎言,我尝试学习Python是因为更加友好。我曾经使用过Fortran,但是我讨厌使用Python。谢谢。

我正在尝试合并一个数组,该数组指定必须删除的行和列。这是我最初的想法:

from numpy import*

import numpy as np

mat=array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

x=[[1],[0],[1],[0]]

for i in x:

if i==1:

row=0

col=0

mat=np.delete(np.delete(mat,row,0),col,1)

print mat

当“ x”的第一行(第0行)中出现一个时,这是所需的矩阵:

mat=array([[6,7,8],[10,11,12],[14,15,16]]

当一个出现在“ x”的第三行(第2行)中时,这是所需的矩阵:

mat=array([[6,8], [14,16]])

注意:x给出要在原始矩阵“ mat”中删除的索引。

再次感谢。

解决方案

在我看来,np.delete重复应用于同一矩阵可以完成此工作:

from __future__ import print_function

import numpy as np

mat = np.array([[1,2,3],[4,5,6],[7,8,9]])

print( "initial mat:\n", mat )

rmlist = [ (2,0), (1,1) ] # a list of (row,col) to be removed

# rmlist = [ [2,0], [1,1] ] # this also works

for (row, col) in rmlist:

print( "removing row", row, "and column", col )

mat = np.delete( np.delete( mat, row, 0 ), col, 1 )

print( mat )

结果(这不是您所期望的...吗?):

initial mat:

[[1 2 3]

[4 5 6]

[7 8 9]]

removing row 2 and column 0

[[2 3]

[5 6]]

removing row 1 and column 1

[[2]]

编辑

如果您需要保留原始矩阵的特定行和列,则可以通过直接选择行和列来实现,例如

print( "initial mat = \n", mat )

print( "sliced mat = \n", mat[ :, [1, 3] ] )

print( "further sliced mat = \n", mat[ :, [1, 3] ][ [1,3] ] )

其中[1,3]表示应保留第一行和第三行(或列)。使用Question中的4x4矩阵,结果变为

initial mat =

[[ 1 2 3 4]

[ 5 6 7 8]

[ 9 10 11 12]

[13 14 15 16]]

sliced mat =

[[ 2 4]

[ 6 8]

[10 12]

[14 16]]

further sliced mat =

[[ 6 8]

[14 16]]

如有必要,您还可以从x = [1,0,1,0]创建上述选择列表(如[1,3]),如下所示:

x = [ 1, 0, 1, 0 ]

s = []

for i in range( len(x) ):

if x[i] == 0: s.append( i )

print( "s = ", s ) # s = [1,3]

print( "further sliced mat (again) = \n", mat[ :, s ][ s ] )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值