Python 将一维numpy ndarray分配到二维数组的列中
假设Python 将一维numpy ndarray分配到二维数组的列中,python,arrays,numpy,Python,Arrays,Numpy,假设dst是具有形状(5,N)的数据阵列,ramp是具有形状(5,)的数据阵列。(在这种情况下,N=2): 现在我想将ramp复制到dst的列中,结果如下: >>> dst array([[1., 1.], [1.25., 1.25.], [1.5., 1.5.], [1.75, 1.75], [2.0, 2.0]]) 我没想到这会起作用,它也不会: >>> dst[:] = ramp Tracebac
dst
是具有形状(5,N)的数据阵列,ramp
是具有形状(5,)的数据阵列。(在这种情况下,N=2):
现在我想将ramp复制到dst的列中,结果如下:
>>> dst
array([[1., 1.],
[1.25., 1.25.],
[1.5., 1.5.],
[1.75, 1.75],
[2.0, 2.0]])
我没想到这会起作用,它也不会:
>>> dst[:] = ramp
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (5) into shape (5,2)
有什么想法吗
笔记
与此不同,我希望将
ramp
分配到dst
(甚至是dst
的子集)。此外,这里给出的解决方案使用python数组作为源,而不是数据数组,因此需要调用.transpose等。方法1:使用广播:
正如评论中提到的那样。广播也在协助方面起作用
dst[:] = ramp[:,None]
方法2:使用
列堆栈
N = dst.shape[1]
dst[:] = np.column_stack([ramp.tolist()]*N)
Out[479]:
array([[1. , 1. ],
[1.25, 1.25],
[1.5 , 1.5 ],
[1.75, 1.75],
[2. , 2. ]])
方法3:使用
np.tile
N = dst.shape[1]
dst[:] = np.tile(ramp[:,None], (1,N))
啊!!感谢您的
ramp[:,None]
提示。这更容易(因为广播在这种情况下起作用):dst[:]=ramp[:,None]
。(如果您同意,请随时更新您的答案!)哈!也完全忘记了任务中的广播作品。我把它添加到了答案中:)这回答了你的问题吗?建议的帖子()比下面给出的答案复杂得多。它不涉及复制到向量中。否则我永远不会发现这种“努普式”的技术。
N = dst.shape[1]
dst[:] = np.column_stack([ramp.tolist()]*N)
Out[479]:
array([[1. , 1. ],
[1.25, 1.25],
[1.5 , 1.5 ],
[1.75, 1.75],
[2. , 2. ]])
N = dst.shape[1]
dst[:] = np.tile(ramp[:,None], (1,N))