Python 展开numpy数组维度和重塑
我有一个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
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个值中的一个?您希望附加行具有什么值?只有当数组中的元素总数保持不变时,重塑才有效。