假设两个正方形数组a
和b
具有相同的形状。在这个例子中,a
和b
都有6行6列。a
和b
的每一行和每一列都保存值1、2、3、4、5、6。
在a
中,一些元素被设置为负数,如图所示,作为早期过程的一部分('-'元素的数量并不重要)。在b
中,所有元素都是“+”。
a = np.array([[-1, -3, -5, -6, 4, 2],
[-2, -4, 6, 5, 3, -1],
[ 5, -6, 1, 3, -2, -4],
[ 6, -2, -4, -1, 5, 3],
[ 4, 5, -3, -2, 1, -6],
[ 3, -1, 2, 4, 6, -5]])
b = np.array([[ 4, 3, 1, 5, 6, 2],
[ 5, 4, 2, 3, 1, 6],
[ 3, 6, 5, 2, 4, 1],
[ 1, 2, 4, 6, 5, 3],
[ 2, 1, 6, 4, 3, 5],
[ 6, 5, 3, 1, 2, 4]])
我需要为b
中的元素分配符号,这些元素是a
中相应元素符号的补数。
即:在a
的第1列中,1和2为负,3至6为正。因此,在'b'的第一列中,1和2必须保持为正,3到6必须为负。对于a
和b
的每个对应列重复该方法。最后的结果看起来像这样:
b = np.array([[-4, 3, -1, -5, -6, -2],
[-5, 4, -2, -3, -1, 6],
[-3, 6, 5, 2, -4, 1],
[ 1, 2, 4, 6, -5, -3],
[ 2, 1, -6, -4, -3, 5],
[-6, -5, 3, 1, 2, 4]])
问:是否有一种有效的方法来分配符号b
以这种方式?(实际的数组更大,数量非常多)
1条答案
按热度按时间xzv2uavs1#
假设每个1-6的绝对数在每列中只出现一次。
您可以按绝对值对列进行排序,复制符号,然后将排序反转为原始状态。
使用
argsort
、take_along_axis
和sign
:输出量: