numpy数组切片行和列的交集

时间:2019-11-21 09:27:24

标签: python arrays numpy numpy-slicing

我需要切片一个numpy数组,以便获得对应于深绿色区域的数组: array

绿色区域是列和行中多个范围的交集。 我想到了类似的东西:

M[[1:3,5:7],[1:3,5:7]]=np.zeros(4,4)

但是它不起作用。如何有效地做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为您只需要分别完成每个深绿色部分,就像这样:

M[1:3, 5:7] = np.zeros((2,2))

然后重复其他深绿色区域。

编辑: 我想我对您想做的事情了解得更多,您想更加动态地做它,所以我认为类似的事情会起作用:

ta = slice(1, 3)
tb = slice(5, 7)
slices=[ta, tb]
slices = [(s1, s2) for s1 in slices for s2 in slices] #Gives all combinations of slices
for s in slices:
    M[s] = np.zeros((2,2))

答案 1 :(得分:1)

我在stackoverflow上使用此matlab like array indexing with numpy找到了答案

我添加了一个数组来执行我想要的操作。最终的代码是:

rows = np.hstack((np.arange(1,3), np.arange(5,7)))
cols = np.hstack((np.arange(1,3), np.arange(5,7)))

M[np.ix_(rc,rc)]=np.zeros(4,4)

也许有一种更有效的方式来定义行和列,但这对我有用

答案 2 :(得分:0)

更新实际上是这样的:

  <endpoint address="{URL}" binding="basicHttpBinding" bindingConfiguration="{ClassMethodName}" contract="{ServiceReferenc}.{ClassName}" name="{ClassMethodName}">
    <headers>
      <wsse:Security mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:UsernameToken wsu:Id="UsernameToken-{UsernameToken}">
          <wsse:Username>{Username}</wsse:Username>
          <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">{Password}</wsse:Password>
          <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">{EncodingType}</wsse:Nonce>
        </wsse:UsernameToken>
      </wsse:Security>
    </headers>
  </endpoint>

我发现的最佳选择:

np.hstack((x[[1,2,5,6], 1:3], x[[1,2,5,6], 5:7]))

但是您仍然需要相互交换线路