【问题标题】:transform a numpy array of dimensions nx1 into a numpy array of dimensions nx10 [duplicate]将尺寸为nx1的numpy数组转换为尺寸为nx10的numpy数组[重复]
【发布时间】:2015-12-12 04:18:20
【问题描述】:

我有一个 numpy 数组,A,大小为 nx1,其中每个值都是 0 到 9 之间的数字。

我想创建一个大小为nx10 的新数组B,以便在B[i] 中存储一个numpy 数组,该数组在A[i] 的位置包含零和1。

例如:

A array
[[9]
 [2]
 [4]
 [1]
 [8]]

B array
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]]

有没有一种优雅的方式来使用 numpy 做到这一点?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    你可以做这样的事情,假设 X 的 NP Nx1 数组:

    max_val = max(X)
    length_arr = len(X)
    new_arr = np.zeros((max_val,length_arr))
    

    这将创建您想要的正确大小的数组。

    for i in range(len(X)):
        new_arr[i][X[i]-1]=1
    

    然后应该在适当的位置分配正确的值吗?

    在我的测试用例中运行良好。

    【讨论】:

      【解决方案2】:

      使用numpy.zeros创建一个新的空数组,它的大小将是(arr.sizearr.max()),现在使用多维索引填充这些位置上的项目:

      >>> arr = np.array([[9], [2], [4], [1], [8]])
      >>> arr_ = np.zeros((arr.size, arr.max()))
      >>> arr_[np.arange(arr.size), arr[:,0]-1] = 1
      >>> arr_
      array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
             [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
             [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.]])
      

      【讨论】:

        【解决方案3】:

        这样的事情可以做到:

        A = [[9],[2],[4],[1],[8]]
        B = [[1 if i == j[0] else 0 for i in range(10)] for j in A]
        

        这是一种基于列表的方法;您可以简单地在 B 上使用 np.asarray 来获取 numpy 矩阵,或者在 numpy 中创建一个 10x10 的零矩阵并在 A 数组指定的位置填充 1。

        后者概括为 A 的元素可能包含多个项目的情况。

        【讨论】:

          猜你喜欢
          • 2021-01-05
          • 1970-01-01
          • 2018-05-18
          • 1970-01-01
          • 2018-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多