arrays - 为什么 numpy 数组会以这种方式表现
问题描述
我正在做一个迷你项目,我打算使用纯 Python 而不需要任何外部库。但是在某个时刻,我得到了一个像这样的TypeErrorTypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
。这是因为试图直接将列表中的所有元素平方,如下所示:
. 虽然我已经创建了一个可以将列表平方的函数,但是当我尝试像这样将一个 numpy 数组相乘时:my_list = [0, 7, 2, 9]
print(my_list ** 2)
import numpy as np
my_list = np.array([0, 7, 2, 9])
print(my_list ** 2)
# 打印数组[0, 49, 4, 9]
我的问题是为什么会发生这种情况?或者 numpy 是否有一个特殊的属性可以让它表现得像这样?
解决方案
np.ndarray
为诸如__pow__
. 这就是它如何设法按元素处理这些操作。使用内置列表,您可以使用列表推导:
[x**2 for x in my_list]
您还可以定义自己的类来公开此类自定义行为:
>>> class PowList(list):
... def __pow__(self, other):
... return [x**2 for x in self]
...
>>> my_list = PowList([1, 2, 3, 4, 5])
>>> my_list ** 2
[1, 4, 9, 16, 25]
推荐阅读
- discord.js - discordjs 这段代码没有设置我的机器人的活动
- huawei-mobile-services - HMS Ads Kit-Error code 4 is returned when obtaining ads
- r - 如何在具有不同含义的多个相同单词的行上执行正则表达式?
- r - 如何在 ts 对象图中添加月份?
- angular - ng2-smart-table : 自定义 img css
- python - tkinter 用鼠标在任何方向创建矩形
- java - Cordova 构建 Android 错误
- tensorflow - 在给定最大值列表的情况下,Tensroflow 中随机数列表的最高效计算方式,如 `np.random.randint`
- reactjs - 单元测试时如何通过{history, location, match}
- go - 将项目移动到新目录后出现意外的目录布局