初始化特定形状的Numpy数组

时间:2020-03-30 12:55:39

标签: python arrays numpy

我想初始化一个特定形状的numpy数组,这样当我向其添加数字时,它将“填充”该形状。

数组的长度会有所不同-很好,我不在乎它有多长-但我希望它具有4列。理想情况是类似于以下内容:

array = np.array([:, 4])
print(array)
array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

同样,不会定义数组的实际长度。这样,如果我要追加一个不同的数组,它将按以下方式工作

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

有什么办法吗?

2 个答案:

答案 0 :(得分:1)

如果我很了解您的问题,我认为您不需要初始化数组。 您先检查一下数组大小是否除以4。

public int[] fix34(int[] nums) {

  int start = 0;
  int end = nums.length-1;

  boolean is3 = false;
  boolean is4 = false;


  while( start < nums.length-1 ){

    if(nums[start] == 3){
      is3 = true;
    }

    if(nums[end] == 4){
      is4 = true;
    }


    if(is3 && is4){
      int temp = nums[start+1];
      nums[start+1] = nums[end];
      nums[end] = temp;

      is3 = false;
      is4 = false;
    }



    if(is3){
      end--;
      continue;
    }

    start++;
  }
  return nums;

}

答案 1 :(得分:0)

您寻求的行为是不寻常的。您应该解释为什么需要它。如果您希望随时随地增长,请使用Python listnumpy个数组的大小固定。可以通过多种方式将值分配给数组,但是要使其增长,您需要使用某个版本的concatenate创建一个新数组。 (是的,有一个resize函数/方法,但这并不常用。)

我将说明值分配选项:

初始化一个具有已知大小的数组。在您的情况下,5个可能比预期的大,而4个是所需的“列”数。

In [1]: arr = np.zeros((5,4), dtype=int)                                                     
In [2]: arr                                                                                  
Out[2]: 
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])

将4个值分配给一行:

In [3]: arr[0] = [1,2,3,4]                                                                   

从数组的平面视图中的给定点开始分配3个值:

In [4]: arr.flat[4:7] = [1,2,3]                                                              
In [5]: arr                                                                                  
Out[5]: 
array([[1, 2, 3, 4],
       [1, 2, 3, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])

此数组虽然定义为(5,4)形状,但可以视为(20,)1d数组。我必须在平面视图中选择适当的切片值。

更常见的是,我们将值分配给行块(或其他各种索引区域)。 arr[2:, :]arr的(3,4)部分。因此,我们需要为其分配(3,4)数组(或等效的列表结构)。要充分利用这种分配,您需要阅读broadcasting

In [6]: arr[2:,:] = np.reshape(list(range(10,22)),(3,4))                                     
In [7]: arr                                                                                  
Out[7]: 
array([[ 1,  2,  3,  4],
       [ 1,  2,  3,  0],
       [10, 11, 12, 13],
       [14, 15, 16, 17],
       [18, 19, 20, 21]])
In [8]: arr.ravel()                                                                          
Out[8]: 
array([ 1,  2,  3,  4,  1,  2,  3,  0, 10, 11, 12, 13, 14, 15, 16, 17, 18,
       19, 20, 21])