【问题标题】:Converting array of ints to binary in Python3: "TypeError: only integer scalar arrays can be converted?"在 Python3 中将整数数组转换为二进制:“TypeError:只能转换整数标量数组?”
【发布时间】:2021-07-24 16:19:54
【问题描述】:

据我所知,这不是一个重复的问题。我将在下面列出相关但不同的问题。

这是我尝试运行的代码,将整数数组转换为二进制作为单个向量化操作:

import numpy as np

a = np.array([1,2,3,4],dtype=int)
b = bin(a)

----> 4 b = bin(a)

TypeError: only integer scalar arrays can be converted to a scalar index

...嗯...我实际上是在“整数标量数组”上进行操作。 (并且将dtype=int 更改为dtype=np.int64 之类的内容无效。)

我意识到可以做到这一点with a loop (Python 2 question),或者作为列表理解(我知道bin 产生字符串),所以......这篇文章更多的是一个问题:为什么我不能这样做 作为单个矢量化操作,为什么会出现错误消息?在这种情况下似乎很不合适。有什么想法吗?

相关但非重复问题:hereherehereherehere

docs for bin 读取“转换整数...”表明数组是不允许的,它是 Python 函数而不是 numpy 函数。 (好的,那么列表理解或循环就是 - 这些似乎是,我希望有一些东西)。但是为什么会出现关于整数标量数组的错误信息呢?

谢谢。

【问题讨论】:

  • bin 尝试在对象上调用__index__,如果它不是您链接的文档中描述的int。整数标量数组类似于np.array(1)np.array(1).__index__() 返回 1np.array([1]).__index__() 给出相同的 TypeError
  • 要进行实际转换,请检查此问题:stackoverflow.com/q/57836960
  • np.vectorizemap 并且所有这些本质上仍然是循环,不会显示出神奇的“加速”。此外,np.vectorize 可能会减慢您的代码速度,尤其是在没有发生底层 numpy 操作的情况下,所以我会远离它。
  • @Mark 是的,我什至在 OP 中写道,“我知道 bin 会产生字符串”。没掌握实用程序也没关系。 ;-) 这不关你的事,但我正在研究Champerowne's Number 的二进制表示。
  • 抱歉@sh37211 没有抓住那条线。我假设因为您的代码试图将一个 numpy 数组传递给bin(),所以您才刚刚开始并且可能不了解基础知识。 ;-) 只是想帮忙。祝你好运。

标签: python python-3.x


【解决方案1】:

您需要将函数映射到 numpy 数组的每个元素 -

import numpy as np
a = np.array([1,2,3,4],dtype=int)
b = np.array(list(map(bin,a)))

此外,您可以查看此链接 - Most efficient way to map function over numpy array

【讨论】:

  • 嘿,谢谢!你分享的那个链接帮助我做了我自己的比较。不确定 cmets 是否会显示图像,但是:perfplot comparison(还包括是否将地图包装在 np.array 中)。所以看起来 我错了 并且列表理解速度非常快!我在创建这篇文章之前运行的第一个测试有一些我没有考虑到的延迟。
猜你喜欢
  • 2020-04-30
  • 2020-04-20
  • 2020-07-23
  • 2013-09-09
  • 2019-03-15
  • 2016-07-08
  • 1970-01-01
  • 2021-02-09
  • 2020-03-12
相关资源
最近更新 更多