numpy(二)——数据类型

numpy(二)——数据类型

import numpy as np

“数据类型,即dtype,是一个特殊的对象,它包含了ndarray需要为某一个类型数据所申明的内存块信息”——《利用Python进行数据分析 第二版》P92

一个ndarray在被创建时,可以显式地指定其数据类型,而指定的方式不一而同,一般来说,有以下几种:

  • 通过数据类型的字符串指定

arr_float16 = np.array([1,2,3],dtype="float16") #指定数据类型后,不管输入的原列表的数据类型是什么,都会按照指定的类型进行输出
arr_float16
array([ 1.,  2.,  3.], dtype=float16)
arr_int8 = np.array([1,2,3],dtype="int8")
arr_int8
array([1, 2, 3], dtype=int8)
arr_bool = np.array([True,False,True,False],dtype="bool")
arr_bool
array([ True, False,  True, False], dtype=bool)
  • 通过数据类型字符串指定过于繁琐,因此也可以通过类型代码字符串进行指定

arr_f2 = np.array([1,2,3],dtype="f2") #与上述arr_float16完全等价
arr_f2
array([ 1.,  2.,  3.], dtype=float16)
arr_i1 = np.array([1,2,3],dtype="i1")
arr_i1
array([1, 2, 3], dtype=int8)
arr_bool = np.array([True,False,True,False],dtype="?")
arr_bool
array([ True, False,  True, False], dtype=bool)
  • 通过np对象指定

arr_int16 = np.array([1,2,3],dtype=np.int16)
arr_int16
array([1, 2, 3], dtype=int16)
arr_float32 = np.array([1,2,3],dtype=np.float32)
arr_float32
array([ 1.,  2.,  3.], dtype=float32)
  • 通过Python原生数据类型指定

arr_int = np.array([1,2,3],dtype=int)
arr_int
array([1, 2, 3])
arr_float = np.array([1,2,3],dtype=float)
arr_float
array([ 1.,  2.,  3.])

不过,在这种情况下,你无法指定数据类型在内存中的所占字节多少,默认int为32位,float为64位

print(arr_int.dtype)
print(arr_float.dtype)
int32
float64

numpy中所有可用的数据类型见《利用Python进行数据分析 第二版》P93页表4-2,以及《Python数据科学手册》P35表2-1

需要注意的地方:

  • 一般情况下,不必过于思考应该采用哪种字节长度的数据类型,“通常你只需要关系数据的大类,比如是否是浮点型、整数、布尔值、字符串或某个Python对象”(《利用Python进行数据分析 第二版》P92)。当只有在操作危及到你的内存容量的大数据集时,你才需要精打细算,仔细考虑究竟应该采用哪种数据类型,以节约内存,提高数据处理的效率。

关于string_和unicode_数据类型

这两个类型都指向字符或字符串数据类型,但是二者仍与区别,以及有一些值得注意的地方:

  • string_类型的类型代码是S,面向的数据类型是ascii字符串,例如生成一个长度10以内的ascii类型字符串,可以用"S10"

arr_str = np.array(["hello","world","how","are","you","today"],dtype = "S10")
arr_str
array([b'hello', b'world', b'how', b'are', b'you', b'today'],
      dtype='|S10')

可以看到,如果指定的长度小于输入中的某些字符串长度,则输出会按照指定长度进行截取。
并且也可以发现,由于string_是代表ascii类型字符串,因此,得到的输出结果是bytes类型的字符对象,也就是用十进制ascii值表示的二进制字符数据。需要decode解码之后才可以变为str类型的字符串。

arr_str_3 = np.array(["hello","world","how","are","you","today"],dtype = "S3")
arr_str_3
array([b'hel', b'wor', b'how', b'are', b'you', b'tod'],
      dtype='|S3')
arr_str[1][0] #"w"的ascii值是119
119
arr_str[1].decode()
'world'

并且,当我们输入非ascii字符的时候,就会因此错误

arr_str_test = np.array(["hello","你好"],dtype="S10")
arr_str_test
---------------------------------------------------------------------------

UnicodeEncodeError                        Traceback (most recent call last)

<ipython-input-58-f3344d50f40e> in <module>
----> 1 arr_str_test = np.array(["hello","你好"],dtype="S10")
      2 arr_str_test


UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
  • unicode_类型的类型代码是U,面向的数据类型是unicode字符串,例如生成一个长度10以内的unicode类型字符串,可以用"U10"

unicode_类型返回的直接就是str类型字符串。至于该类型其余性状,与string基本一致,不再赘述

arr_unicode = np.array(["hello","你好"],dtype="U10")
arr_unicode
array(['hello', '你好'],
      dtype='<U10')

数据类型转换——astype方法

当一个数组生成后,数据类型也随之被确定,但是仍可用astype方法对其数据类型进行转换,这个方法可以生成一个新的数组

arr1 = np.array([1,2,3]) #如果不指定,那么就是int32
arr1.dtype
dtype('int32')
arr2 = arr1.astype("float64")
arr2.dtype
dtype('float64')

关于astype的注意点:如果想把一个浮点类型数组转成整形,则会丢失小数点后的部分,如9.9转型后将会成为9,-2.7会变成-2。更多细节详见《利用Python进行数据分析 第二版》P93

在最后,仍有一点需要注意:与Python列表不同,numpy数组中的元素数据类型必须相同,如有不同,则自动向上转型:

arr_test = np.array([1,1.5,2,"你好"])
arr_test
array(['1', '1.5', '2', '你好'],
      dtype='<U32')
### Windows系统上下载、安装并启动Nacos #### 下载Nacos 为了获取最新的稳定版本,建议访问[Nacos官方GitHub页面](https://github.com/alibaba/nacos/releases),从中选择适合操作系统的压缩包进行下载。对于Windows环境而言,通常会选择`.zip`格式的文件。 #### 安装与解压 完成下载之后,在本地计算机找到所下载的.zip文件,并将其解压至指定位置。推荐将解压后的文件夹放置于容易管理的位置,比如D:\nacos\这样的路径之下[^3]。 #### 编辑启动脚本 进入解压后形成的nacos目录下的`bin`子文件夹内,这里存在用于不同操作系统启动的服务脚本。针对Windows平台来说,需要关注的是名为`startup.cmd`的批处理文件。如果希望修改默认端口或者其他参数,则可以在该文件中做相应调整[^1]。 #### 启动服务验证 双击执行上述提到过的`startup.cmd`来尝试启动Nacos服务器。正常情况下,这一步骤会自动打开一个新的命令提示符窗口显示启动日志;如果没有弹出任何界面或者遇到异常情况,请确认Java环境已经正确配置以及防火墙/杀毒软件未阻止此程序运行。 #### 设置为Windows服务实现开机自启 为了让Nacos能够在每次重启电脑时自动加载,还需要额外做一些工作: - **准备WinSW工具**:前往[WinSW项目主页](https://github.com/kohsuke/winsw)下载适用于.NET Framework 4.x版本的应用——即`WinSW.NET4.exe`。 - **重命名与复制**:把刚才获得的可执行文件改名为`nacos-service.exe`,接着把它移动到之前提到的那个`bin`文件夹里去[^4]。 - **创建XML配置文件**:在同一目录下新建一个叫做`nacos-service.xml`的文字文档,按照下面模板编写内容(注意替换实际路径): ```xml <service> <id>nacos</id> <name>Nacos Service</name> <description>This is the service description of Nacos.</description> <executable>D:\nacos\bin\nacos.bat</executable> <!-- 这里的路径应指向你的startup.cmd --> <logmode>rotate</logmode> <onfailure action="restart"/> </service> ``` - **注册服务**:再次回到命令行模式,确保当前位置处于含有以上两个新添加文件(`nacos-service.exe`, `nacos-service.xml`) 的`bin` 文件夹之中,键入`.\nacos-service.exe install` 来完成最终的服务登记过程。 通过这些步骤就可以成功地让Nacos作为一个后台进程持续运作起来,并且实现了随机器一同唤醒的功能。 ```batch :: Example batch file to start Nacos on Windows using startup.cmd @echo off cd /d "D:\nacos\bin" start "" "startup.cmd" pause ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值