【问题标题】:Numpy array construction using tuples使用元组构建 Numpy 数组
【发布时间】:2014-07-31 13:04:55
【问题描述】:
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' 不支持输入类型,并且 输入无法安全地强制转换为任何支持的类型 根据铸造规则'安全'

TypeError 让我感到困惑,因为 A 和 B 都只包含整数。 A 我 100% 确定是所有整数。 B 的构造方式如下:

B = np.vstack((A[1:],np.ones(A.shape[1])))

这不应该都是整数吗?

【问题讨论】:

  • 题目和题目有什么关系?
  • AB中存储了哪些值?举几个例子。
  • @lazy1 哈哈抱歉,措辞非常糟糕,因为这是我最好的尝试。你会如何表达它?我的重点是能够以“pythonic”方式访问每个元素中的各个元素来构造数组
  • 贴一个A的例子。
  • @JohnSmith 不,你没有。您发布了 B 的示例,而不是 A。

标签: python arrays numpy tuples list-comprehension


【解决方案1】:

所以,您的问题是,np.ones() 返回一个包含双精度值的数组。您不能使用 numpy 中的 xor 运算符对值进行异或运算。要解决这个问题,你应该在创建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]])

【讨论】:

  • 我仍然收到 TypeError :s
  • 我需要一个更详细的错误和可能的输入示例。
【解决方案2】:

^ 运算符是在 numpy 数组上定义的,如果 AB 是元组,那么:

C = np.array(A) ^ np.array(B)

xor 是在 numpy 级别完成的,应该非常快。

【讨论】:

  • 抱歉 A 和 B 是 numpy 数组,但是我仍然收到 TypeError
【解决方案3】:

您缺少 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])

【讨论】:

  • 我仍然收到 TypeError,如果您可以查看我原始帖子中的编辑,我将不胜感激
  • @JohnSmith 而不是点点滴滴的信息,请提供您正在运行的代码的完整 minimal example 以及完整的错误回溯,以便其他人可以复制您看到的问题.
猜你喜欢
  • 2021-10-06
  • 2010-11-15
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
相关资源
最近更新 更多