我想初始化一个特定形状的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]]
有什么办法吗?
答案 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 list
。 numpy
个数组的大小固定。可以通过多种方式将值分配给数组,但是要使其增长,您需要使用某个版本的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])