在Numpy数组中使用Dictionary不会使该数组具有单一数据类型 - python

我是python的新手,正在学习Numpy。我已经阅读和测试的是np.array具有单一数据类型。当我在普通代码上使用它时,它可以正常工作并表现良好。即

import numpy as np 
np1 = np.array([1,'2' , True])

for i in np1:
   print(type(i))

答案是

<class 'numpy.str_'>
<class 'numpy.str_'>
<class 'numpy.str_'>

但是当我的代码是

np2 = np.array([{1:1 , 2:2 }, 1 , True , '1'])
for i in np2:
    print(type(i))

答案是

<class 'dict'>
<class 'int'>
<class 'bool'>
<class 'str'>

这表明元素不是numpy类,因为上面的答案是<class 'numpy.str'>
当我打印print(type(np2))时,答案是<class 'numpy.ndarray'>
您能解释为什么它们不是同一数据类型吗?谢谢

参考方案

如果未提供所需的数组数据类型,则类型“将被确定为在序列中保存对象所需的最小类型”。

在第一种情况下,最小类型为str,因为每个项目都可以转换为字符串。新数组包含字符串。

在第二种情况下,最小类型为object(因为<class 'str'>dict无法转换为字符串)。新数组包含对对象的引用。每个对象都有其自己的类型。

您可以强制np1为对象数组:

np1 = np.array([1, '2' , True], dtype=object)
type(np1[0]))
#<class 'int'>
type(np1[1]))
#<class 'str'>
type(np1[2]))
#<class 'bool'>

numpy.savetxt“元组索引超出范围”? - python

我试图在文本文件中写几行,这是我使用的代码:import numpy as np # Generate some test data data = np.arange(0.0,1000.0,50.0) with file('test.txt', 'w') as outfile: outfile.write('…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。