2024-09-27 02:27:38 发布
网友
我想能够移动一个三维纽比阵列沿高度轴的任何一个方向。 如果给定3的正移位,则数组中的所有值都会上移,3个新的零片将出现在数组的底部。如果给定负偏移,则会发生相反的情况,所有切片沿高度轴向下移动,新的零切片出现在顶部。在
我尝试过将数组重塑为1D,然后左右移动,然后返回到3D。但是,这会使数组沿着错误的方向移动。我试着实施滚动轴在整形之前,沿着正确的轴移动。但是我正在工作的系统不能识别所有的numy函数,也不能执行rollaxis。在
谢谢!在
你的问题有点不明确。首先,在3D数组中,“高度”轴并不是一个非常明确的定义。最好通过形状元组中的位置来定位它们。我将把它理解为“沿着第一个轴”,但是对于另一个轴,它应该是显而易见的。在
第二,虽然很明显您希望零填充移位的数据,但您没有指定要对另一侧的数据执行什么操作:它是否应该在数组边界之外消失并丢失?或者应该扩展数组来保留它?在
对于前者,numpy有一个^{}函数,它的功能与您想要的类似,但是它没有填充零,而是从数组的另一端复制数据。您可以简单地将其替换为0:
>>> a = np.arange(60).reshape(3, 4, 5) >>> a array([[[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]], [[20, 21, 22, 23, 24], [25, 26, 27, 28, 29], [30, 31, 32, 33, 34], [35, 36, 37, 38, 39]], [[40, 41, 42, 43, 44], [45, 46, 47, 48, 49], [50, 51, 52, 53, 54], [55, 56, 57, 58, 59]]]) >>> b = np.roll(a, 2, axis=0) >>> b[:2,:, :] = 0 >>> b array([[[ 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0]], [[ 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0]], [[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]])
如果偏移是负的,那么就用b[:shift, :, :] = 0代替b[-shift:, :, :] = 0。在
b[:shift, :, :] = 0
b[-shift:, :, :] = 0
如果不想丢失数据,那么基本上只需在数组的顶部或底部添加零片。对于前三个维度,numpy有^{},^{},和^{},而{}应该是您所追求的那个:
如果希望在底部追加0,只需更改调用stacking函数时参数的顺序。在
你的问题有点不明确。首先,在3D数组中,“高度”轴并不是一个非常明确的定义。最好通过形状元组中的位置来定位它们。我将把它理解为“沿着第一个轴”,但是对于另一个轴,它应该是显而易见的。在
第二,虽然很明显您希望零填充移位的数据,但您没有指定要对另一侧的数据执行什么操作:它是否应该在数组边界之外消失并丢失?或者应该扩展数组来保留它?在
对于前者,numpy有一个^{} 函数,它的功能与您想要的类似,但是它没有填充零,而是从数组的另一端复制数据。您可以简单地将其替换为0:
如果偏移是负的,那么就用
b[:shift, :, :] = 0
代替b[-shift:, :, :] = 0
。在如果不想丢失数据,那么基本上只需在数组的顶部或底部添加零片。对于前三个维度,numpy有^{} ,^{} ,和^{} ,而{}应该是您所追求的那个:
^{pr2}$如果希望在底部追加0,只需更改调用stacking函数时参数的顺序。在
相关问题 更多 >
编程相关推荐