Python 展开numpy数组维度和重塑

Python 展开numpy数组维度和重塑,python,arrays,numpy,Python,Arrays,Numpy,我有一个numpy数组,包含: arr = [1 2 3 4 5 6] 当我执行时: print(arr.shape) 它给了我: (6,) 我想加上常数3 const_val = 3 进入数组的维度,以便获得: (6,3) 首先,我尝试通过以下方式扩展数组的维度: arr = np.expand_dims(arr, axis = -1) 现在在哪里: print(arr.shape) 返回给我: (6,1) 但是,当我尝试重塑数组维度以将1替换为常量值3时 arr = np

我有一个numpy数组,包含:

arr =  [1 2 3 4 5 6]
当我执行时:

print(arr.shape)
它给了我:

(6,)
我想加上常数3

 const_val = 3
进入数组的维度,以便获得:

(6,3)
首先,我尝试通过以下方式扩展数组的维度:

arr = np.expand_dims(arr, axis = -1)
现在在哪里:

print(arr.shape)
返回给我:

(6,1)
但是,当我尝试重塑数组维度以将1替换为常量值3时

arr = np.reshape(arr, (arr.shape[0], const_val))
我得到的错误是:

ValueError: cannot reshape array of size 6 into shape (6,3)

我可以知道为什么会发生这种情况吗?

是否要向数组中添加两个空列?在这种情况下,可以连接大小为(6,2)的矩阵:


是否要向数组中添加两个空列?在这种情况下,可以连接大小为(6,2)的矩阵:

当从(6,1)重塑为(6,3)时,需要“输入一些值”,因为从6个条目到18个条目。是否希望两个新列与第一列相同?在这种情况下,用作:

当从(6,1)重塑为(6,3)时,需要“输入一些值”,因为从6个条目到18个条目。是否希望两个新列与第一列相同?在这种情况下,用作:


如果我正确理解您的需求,以下解决方案将是您需要的解决方案:

In [55]: arr =  np.array([1, 2, 3, 4, 5, 6])

# our new desired shape
In [56]: new_shape = (6, 3)

# broadcast to `new_shape` and make it writable 
# since `broadcast_to` returns a non-writable and referenced array
In [57]: arr_new = np.array(np.broadcast_to(arr[:, None], new_shape))

# copy the constant value
In [58]: arr_new[:, 1:] = const_val

In [59]: arr_new
Out[59]: 
array([[1, 3, 3],
       [2, 3, 3],
       [3, 3, 3],
       [4, 3, 3],
       [5, 3, 3],
       [6, 3, 3]])

另一方面,如果您只想将同一阵列复制到新形状,请使用:

In [63]: const_val = 3

In [64]: new_shape = (arr.shape[0], const_val)

In [65]: arr_new = np.array(np.broadcast_to(arr[:, None], new_shape))

In [66]: arr_new
Out[66]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5],
       [6, 6, 6]])

In [67]: arr_new.shape
Out[67]: (6, 3)

如果我正确理解您的需求,以下解决方案将是您需要的解决方案:

In [55]: arr =  np.array([1, 2, 3, 4, 5, 6])

# our new desired shape
In [56]: new_shape = (6, 3)

# broadcast to `new_shape` and make it writable 
# since `broadcast_to` returns a non-writable and referenced array
In [57]: arr_new = np.array(np.broadcast_to(arr[:, None], new_shape))

# copy the constant value
In [58]: arr_new[:, 1:] = const_val

In [59]: arr_new
Out[59]: 
array([[1, 3, 3],
       [2, 3, 3],
       [3, 3, 3],
       [4, 3, 3],
       [5, 3, 3],
       [6, 3, 3]])

另一方面,如果您只想将同一阵列复制到新形状,请使用:

In [63]: const_val = 3

In [64]: new_shape = (arr.shape[0], const_val)

In [65]: arr_new = np.array(np.broadcast_to(arr[:, None], new_shape))

In [66]: arr_new
Out[66]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5],
       [6, 6, 6]])

In [67]: arr_new.shape
Out[67]: (6, 3)

那么,您将如何
一个包含6个值的数据数组重塑为18个值中的一个?您希望额外的行具有什么值?只有当数组中的元素总数保持不变时,重塑才会起作用。那么如何
将具有6个值的数组重塑为18个值中的一个?您希望附加行具有什么值?只有当数组中的元素总数保持不变时,重塑才有效。