【发布时间】: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 产生字符串),所以......这篇文章更多的是一个问题:为什么我不能这样做 作为单个矢量化操作,为什么会出现错误消息?在这种情况下似乎很不合适。有什么想法吗?
相关但非重复问题:here、here、here、here 和 here。
docs for bin 读取“转换整数...”表明数组是不允许的,它是 Python 函数而不是 numpy 函数。 (好的,那么列表理解或循环就是 - 这些似乎是慢,我希望有一些东西快)。但是为什么会出现关于整数标量数组的错误信息呢?
谢谢。
【问题讨论】:
-
bin尝试在对象上调用__index__,如果它不是您链接的文档中描述的int。整数标量数组类似于np.array(1)。np.array(1).__index__()返回1但np.array([1]).__index__()给出相同的TypeError。 -
要进行实际转换,请检查此问题:stackoverflow.com/q/57836960
-
np.vectorize和map并且所有这些本质上仍然是循环,不会显示出神奇的“加速”。此外,np.vectorize可能会减慢您的代码速度,尤其是在没有发生底层 numpy 操作的情况下,所以我会远离它。 -
@Mark 是的,我什至在 OP 中写道,“我知道 bin 会产生字符串”。没掌握实用程序也没关系。 ;-) 这不关你的事,但我正在研究Champerowne's Number 的二进制表示。
-
抱歉@sh37211 没有抓住那条线。我假设因为您的代码试图将一个 numpy 数组传递给
bin(),所以您才刚刚开始并且可能不了解基础知识。 ;-) 只是想帮忙。祝你好运。
标签: python python-3.x