python - 如果条目本身是结构化数组,如何将 numpy 数组中的条目设置为 0 或 None?
问题描述
我有一个结构化数组的对象列表,例如:
a = np.array([('Rex', 9, 81.0), ('Fido', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
b = np.array([('Dog3', 9, 81.0), ('Dog4', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
c = np.array([('Dog5', 9, 81.0), ('Dog6', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
lst = [a, b, c]
现在我需要这个列表本身是一个 numpy 数组,因为我需要在它上面使用numpy.where()
它,否则这不起作用。
lst = np.array(lst)
那么我做这样的事情:
ID = np.where(lst == c)
lst[ID] = 0 or rather lst[ID] = None
但不是我想得到的,即
>>>lst
array([a, b, 0/None], dtype=...)
我要么得到这个:
>>>lst
array([a, b, [('0', 0, 0.), ('0', 0, 0.)]], dtype=...)
或者它根本不起作用:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
我怎样才能做到这一点?我必须转换lst
回列表拳头吗?
解决方案
让我们创建一个更简单的数组,并尝试设置一些值:
In [14]: dt = np.dtype([('foo','U10'),('bar',int)])
In [16]: arr = np.zeros(3, dtype=dt)
In [17]: arr
Out[17]: array([('', 0), ('', 0), ('', 0)], dtype=[('foo', '<U10'), ('bar', '<i8')])
In [18]: arr[1]
Out[18]: ('', 0)
In [19]: arr[1] = 12
In [20]: arr
Out[20]:
array([('', 0), ('12', 12), ('', 0)],
dtype=[('foo', '<U10'), ('bar', '<i8')])
注意字符串 '12' 和整数 12 的混合。
设置一个元组,每个字段一个值:
In [21]: arr[2] = ('dog',23)
设置None
失败,因为它不能转换None
为整数,如第二个字段所要求的那样。
In [22]: arr[0] = None
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-2f7a4c897706> in <module>
----> 1 arr[0] = None
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
In [23]: arr
Out[23]:
array([('None', 0), ('12', 12), ('dog', 23)],
dtype=[('foo', '<U10'), ('bar', '<i8')])
实际上它确实设法设置了字符串字段。
arr
是一个数组,其中每个元素必须具有相同的dtype
.
具有 dtype 的数组的object
行为更像一个列表。虽然偶尔有用,但它不应该用作列表的替代品。
推荐阅读
- routing - 将 Symfony4 @Route 参数传递给控制器的构造
- react-native - 反应本机启动画面
- active-directory - GPO 在 Windows 10 中阻止搜索结果
- python - 当我在我的 ubuntu 16.04 中安装 caffe 时,我遇到了 openCV 问题
- c# - 如果数据库已关闭,则将 log4net 日志记录在文件中
- html - 无法使用宏和 vba 登录网站
- html - 对于某些选项,从 html 下拉列表中选择的菜单变为空白
- postgresql - 如何将表数据从 PostgreSQL (pgAdmin) 导出到 CSV 文件?
- ios - 类型不匹配(Swift.Dictionary
debugDescription: "期望解码字典 但找到了一个数组。” - javascript - Rails 单选是/否按钮以显示更多字段