zoukankan      html  css  js  c++  java
  • numpy增加维度、删除维度

    楔子

    在tensorflow中,可以给一个tensor增加一个维度、删除一个维度,那么在numpy中该怎么呢?

    删除一个维度

    import numpy as np
    arr = np.array([[[1, 2, 3], [2, 3, 4]]])
    print(arr)
    """
    [[[1 2 3]
      [2 3 4]]]
    """
    print(arr.shape)  # (1, 2, 3)
    # 事实上第一个维度我们是不需要的,因为在该维度上数组的长度是1
    
    # 删除第1个维度,我们看到已经改变了
    # 这个操作不会改变原来的数据
    print(np.squeeze(arr, 0))
    """
    [[1 2 3]
     [2 3 4]]
    """
    

    但是注意:只有数组长度在该维度上为1,那么该维度才可以被删除。

    如果不是1,那么删除的话会报错

    import numpy as np
    arr = np.array([[[1, 2, 3], [2, 3, 4]]])
    
    print(arr.shape)  # (1, 2, 3)
    
    try:
        # 删除第二个维度,显然在第二个维度上数组的长度是2,不是1
        # 所以它不能被删除
        print(np.squeeze(arr, 1))
    except Exception as e:
        print(e)  # cannot select an axis to squeeze out which has size not equal to one
    
    

    增加一个维度

    删除只能删除数组长度为1所对应的维度,同理添加也是添加一个维度也只是让数组在这个维度上的长度变成1,因为数组本来不存在这个维度的,但是我们强行加上了一个维度,那么数组在这个维度上的长度只能是1

    import numpy as np
    arr = np.array([[1, 2, 3], [2, 3, 4]])
    
    print(arr.shape)  # (2, 3)
    
    # 很好理解
    print(np.expand_dims(arr, 0).shape)  # (1, 2, 3)
    print(np.expand_dims(arr, 1).shape)  # (2, 1, 3)
    print(np.expand_dims(arr, 2).shape)  # (2, 3, 1)
    
    arr = np.array([1, 2, 3])
    print(np.expand_dims(arr, 0))
    """
    [[1 2 3]]
    """
    print(np.expand_dims(arr, 1))
    """
    [[1]
     [2]
     [3]]
    """
    
  • 相关阅读:
    Intent
    BroadcastReceiver
    AsyncTask两种线程池
    多线程、Service与IntentService的比较
    AsyncTask
    转:Android开发:使用DDMS Heap进行内存泄露调试
    (原创)Android Binder设计与实现
    (原)一句mpAudioPolicy->get_input引发的血案
    LOCAL_WHOLE_STATIC_LIBRARIES与LOCAL_STATIC_LIBRARIES的区别
    非static成员函数通过类名::来调用,空指针调用成员方法不出错!
  • 原文地址:https://www.cnblogs.com/traditional/p/12629050.html
Copyright © 2011-2022 走看看