使用元组构造Numpy数组


C = numpy.array([a^b for a,b in A,B])

是我尝试过的。我想它会把AB中的每一个单独的元素,它们是它们自己的矩阵,并以相同的形状存储在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数组上,如果AB是元组,则:

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])