C = numpy.array([a^b for a,b in A,B])
是我尝试过的。我想它会把A
和B
中的每一个单独的元素,它们是它们自己的矩阵,并以相同的形状存储在C
中。你会怎么做,我的逻辑缺陷在哪里?
编辑:A和B中的所有值都是整型,例如都是形状(3,4),包含0-10的整数范围
C = A^B
导致此错误:
TypeError: ufunc 'bitwise_xor'不支持输入类型,并且不能安全地将输入强制为任何受支持的类型根据类型转换规则'safe'
TypeError让我很困惑,因为A和B都只包含整型数。A我百分之百肯定都是整型的。B的构造方法如下:
B = np.vstack((A[1:],np.ones(A.shape[1])))
不应该都是整型吗?
所以,您的问题是,np.ones()
返回一个包含双值的数组。不能使用numpy中的异操作符对双精度值进行异操作。为了解决这个问题,您应该在创建B时使用dtype
参数,如下例所示:
import numpy as np
A = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
B = np.vstack((A[1:], np.ones(A.shape[1], dtype=np.int))) # Change this line.
C = A ^ B
输出:
array([[ 5, 7, 5, 3],
[ 3, 13, 15, 13],
[ 6, 9, 8, 11]])
^
操作符定义在numpy数组上,如果A
和B
是元组,则:
C = np.array(A) ^ np.array(B)
xor是在numpy级别完成的,应该是超级快的。
您缺少zip
以使您当前的方法工作:
C = numpy.array([a ^ b for a, b in zip(A, B)])
,但请注意还有一种更简单的方法:
C = A ^ B
演示:>>> A = np.array((1, 2, 3, 4))
>>> B = np.array((2, 3, 1, 4))
>>> A ^ B
array([3, 1, 2, 0])