关于#Numpy#的切片问题,如何解决?


import numpy as np

a =np.array([[0,1,2,3],
            [4,5,6,7],
            [8,9,10,11],
             [12,13,14,15]])

b = a[1:2,1:2]
print (b)

==》 [[5]] 

请问为什么b是二维的数组?

虽然 b 只包含一个元素,但它仍然是二维数组,因为 Numpy 中的数组始终保持其维度。
通过索引操作 a[1:2,1:2] 创建了数组 b,是在原始数组 a 的子集中选择特定的行和列。第一个 [1:2] 表示选择从索引 1(包含)到索引 2(不包含)的行,本例中即 [4, 5, 6, 7],第三个 [1:2] 用于选择列,在本例中即 5。通过组合行和列的索引操作,得到的 b 数组是原始数组 a 的一个子集,即二维数组 [[5]]

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7797560
  • 这篇博客也不错, 你可以看下Numpy维度总结(维度理解、一维二维初始化、高维向低维的转化)
  • 除此之外, 这篇博客: Numpy二维数组遍历与二维数组切片后遍历效率比较中的 原因: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 楼主还暂不明确

  • 您还可以看一下 梁勇老师的通过Numpy实现图像处理课程中的 任务简介与效果演示小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    针对该问题,可以直接利用Numpy数组切片的方法,如下所示:

    import numpy as np
    
    b = np.array([[1,2,3],[4,5,6],[7,8,9]]) # 二维数组
    a = b[:,0] # 提取第一列,即一维数组
    print(a)
    

    输出结果为:[1 4 7]

    解释说明:切片方式b[:,0]表示提取数组b中所有行的第0列数据,即提取第一列数据。之所以出现二维数组,是因为切片本身返回的是一个数组,如果只需要其中一维数据,可以使用上述方式继续切片提取即可。

    因为没有找到该问题的具体数据和问题场景,因此以上代码仅供参考,如果实际问题不符合该方案,还需具体分析具体问题。

    参考资料:

    • NumPy 官方文档,https://numpy.org/doc/stable/
    • NumPy 的 ndarray 数据类型,https://zhuanlan.zhihu.com/p/26638159
    • NumPy 教程,https://www.runoob.com/numpy/numpy-tutorial.html