【问题标题】:indexing in python numpy modulepython numpy模块中的索引
【发布时间】:2020-05-29 10:14:30
【问题描述】:

所以,我是 python 新手,正在学习 NumPy 模块。 这是我的数组

c = np.array([[[  0,   1,   2],
               [ 10,  12,  13]],
              [[100, 101, 102],
               [110, 112, 113]]])

如果我尝试通过上面的数组访问它

c[:1,0:]

它产生预期的输出

# expected because print from initial to row 1,0 excluding row 1,0
 array([[[ 0,  1,  2],  
         [10, 12, 13]]]) 

但是现在当我尝试通过它访问它时

c[:1,1:]

它产生的输出

array([[[10, 12, 13]]])

为什么???

【问题讨论】:

  • 看起来你的数组里面有两个数组,numpy 读取为两行。这是你的意图吗?
  • 不,我想做的是,它应该产生从初始行到最后一行的输出,消除 1,1 行
  • 所以输出应该是:(row0,0),(row0,1),(row1,0)
  • 请提供您的全部预期输出,以便我们了解您想要做什么。我不知道你说的“不包括第 1,0 行”是什么意思。
  • array([[[ 0, 1, 2], [ 10, 12, 13]], [[100, 101, 102]]]) # 预期输出

标签: python numpy indexing numpy-slicing


【解决方案1】:

这是一个 3D 数组。你可以检查一下

print(c.shape)

产生

(2, 2, 3)

3D 阵列真的是您想要做的吗?

如果是这样,如果你用两个索引而不是三个来分割它,这意味着第三个是隐含的:。所以c[1, 1] 等价于 c[1, 1, :] 等价于c[1, 1, 0:3]

您的查询c[:1,1:] 等价于c[0, 1, 0:3]:这是正确的结果。

现在根据您的评论,我猜您希望重塑、过滤和重塑:

c.reshape(4, -1)[:3,:].reshape(1, 3, -1)

产量

array([[[  0,   1,   2],
        [ 10,  12,  13],
        [100, 101, 102]]])

【讨论】:

  • yup 3d 数组切片所以如果我想产生像 array([[[ 0, 1, 2], [ 10, 12, 13]], [[100, 101, 102]] 这样的输出]) 那我该怎么办???
  • 在一次调用中是不可能的:您需要稍后将第一个c[:1,:,:] 与第二个c[1,:1,:] 结合起来。或者先将数组重新整形为 2D,然后过滤,如果有意义,再重新整形为 3D。
  • 那么如果我想把它们结合起来,我该怎么做???把它们结合起来是什么意思???
  • 我在上面更新了我的答案。我认为你需要真正考虑形状。重塑单个数组比连接数组更好,因此上面的解决方案。请注意,组合数组是对它们的一个维度求和,并且只有在所有其他维度都具有相同长度时才能工作。
猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2014-02-08
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多