Numpy基础(一)ndarray的生成
ndarray的生成和类型
引言
本文参考《利用Python进行数据分析》(第二版)作者:WesMcKinney以及原书配套代码,笔者在原文及原代码的基础上加以修改,感谢作者和译者的贡献。
1.ndarray
ndarray,即N维数组对象,是numpy中最为核心的大型数据集容器,正是ndarray完成了对于整块数据的整体操作计算而非使用多重循环。
1.1 ndarray的生成
1.1.1接收序列
利用np.array可自动将序列转换为n维数组
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
arr1
#-------------------------------
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2
可以利用.ndim查看维度数.shape查看形状.dtype数据的类型
具体的,np.array函数的具体参数内容如下:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
1.1.2特殊函数
除了使用np.array构建函数,还能通过以下函数构建:
- np.asarray(a, dtype=None, order=None, *, like=None)
需要注意的是,np.array和np.asarray作用基本相同,都是将输入转换为ndarray,但是,区别是当输入已经是ndarray时,array仍然会copy出一个副本,但asarray不再复制。如下例(
原文链接:https://blog.csdn.net/Rex_WUST/article/details/85205179
):
当输入是python原生的序列时
import numpy as np
#example 1:
data1=[[1,1,1],[1,1,1],[1,1,1]]
arr2=np.array(data1)
arr3=np.asarray(data1)
data1[1][1]=2
print 'data1:\n',data1
print 'arr2:\n',arr2
print 'arr3:\n',arr3
输出如下:
data1:
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
arr2:
[[1 1 1]
[1 1 1]
[1 1 1]]
arr3:
[[1 1 1]
[1 1 1]
[1 1 1]]
当输入是numpy中的ndarray时:
import numpy as np
#example 2:
arr1=np.ones((3,3))
arr2=np.array(arr1)
arr3=np.asarray(arr1)
arr1[1]=2
print 'arr1:\n',arr1
print 'arr2:\n',arr2
print 'arr3:\n',arr3
其输出结果为
arr1:
[[ 1. 1. 1.]
[ 2. 2. 2.]
[ 1. 1. 1.]]
arr2:
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
arr3:
[[ 1. 1. 1.]
[ 2. 2. 2.]
[ 1. 1. 1.]]
注:numpy和一般的编程语言不同,变量在转接过程中都直接指向原数组,并不会自动完成copy开辟新的内存空间,如果需要复制,则需要显式利用.copy完成。
既然谈及了copy,就不得不提及原书在4.1.4索引与切片中才提及的视图。所谓视图,就是所有切片或者索引都是对于原数组的反映,对于切片的任何操作都会直观反应到原数组上,如下图所示:
-
numpy.zeros()
创建全零数组。
numpy.zeros(shape, dtype=float, order=‘C’)
参数说明:shape:数组的形状,可以是整数(一维数组)或元组(多维数组)。
dtype:数组的数据类型,默认为 float。
order:指定数组的内存布局。‘C’ 为行优先,‘F’ 为列优先。
示例:
a = np.zeros(5) print(a) # 输出: [0. 0. 0. 0. 0.] b = np.zeros((2, 3), dtype=int) print(b) # 输出: # [[0 0 0] # [0 0 0]]
-
numpy.ones()
创建全一数组。numpy.ones(shape, dtype=float, order=‘C’)
参数说明:同 numpy.zeros()。
示例:
a = np.ones(5) print(a) # 输出: [1. 1. 1. 1. 1.] b = np.ones((2, 3), dtype=int) print(b) # 输出: # [[1 1 1] # [1 1 1]]
-
numpy.empty()
创建未初始化的数组(内容随机)。numpy.empty(shape, dtype=float, order=‘C’)
参数说明:同 numpy.zeros()。
示例:
a = np.empty(5) print(a) # 输出: [随机值 随机值 随机值 随机值 随机值]
-
numpy.arange()
创建等差数组。numpy.arange([start,] stop, [step,], dtype=None)
参数说明:start:起始值,默认为 0。
stop:结束值(不包含)。
step:步长,默认为 1。
dtype:数组的数据类型。
示例:
a = np.arange(5)
print(a) # 输出: [0 1 2 3 4]
b = np.arange(1, 10, 2)
print(b) # 输出: [1 3 5 7 9]
-
numpy.linspace()
创建等间隔数组。numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:start:起始值。
stop:结束值。
num:生成的样本数,默认为 50。
endpoint:是否包含结束值,默认为 True。
retstep:如果为 True,则返回数组和步长。
dtype:数组的数据类型。
示例:
a = np.linspace(0, 1, 5)
print(a) # 输出: [0. 0.25 0.5 0.75 1. ]
-
numpy.eye()
创建单位矩阵。numpy.eye(N, M=None, k=0, dtype=float, order=‘C’)
参数说明:N:行数。
M:列数(默认为 N)。
k:对角线的偏移量。k=0 为主对角线,k>0 为上对角线,k<0 为下对角线。
dtype:数组的数据类型。
order:指定数组的内存布局。
示例:
a = np.eye(3)
print(a)
# 输出:
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
-
numpy.random 相关函数
用于创建随机数组。-
numpy.random.rand()
创建均匀分布的随机数组。numpy.random.rand(d0, d1, …, dn)
参数说明:d0, d1, …, dn:数组的维度。
示例:
a = np.random.rand(2, 3) print(a) # 输出: # [[0.123 0.456 0.789] # [0.234 0.567 0.891]]
-
-
numpy.random.randn()
创建标准正态分布的随机数组。numpy.random.randn(d0, d1, …, dn)
参数说明:同 numpy.random.rand()。
示例:
a = np.random.randn(2, 3) print(a) # 输出: # [[-0.123 0.456 -0.789] # [ 1.234 -0.567 0.891]]
-
numpy.full()
创建指定值的数组。numpy.full(shape, fill_value, dtype=None, order=‘C’)
参数说明:shape:数组的形状。
fill_value:填充值。
dtype:数组的数据类型。
order:指定数组的内存布局。
示例:
a = np.full((2, 3), 7) print(a) # 输出: # [[7 7 7] # [7 7 7]]
-
numpy.identity()
创建单位矩阵(与 numpy.eye() 类似)。numpy.identity(n, dtype=float)
参数说明:n:矩阵的行数和列数。
dtype:数组的数据类型。
示例:
a = np.identity(3) print(a) # 输出: # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]
2.1 ndarray的类型
数据类型 | 描述字符 | 代码 |
---|---|---|
int8 | 8 位有符号整数(-128 到 127) | 'i1' |
int16 | 16 位有符号整数(-32768 到 32767) | 'i2' |
int32 | 32 位有符号整数(-2147483648 到 2147483647) | 'i4' |
int64 | 64 位有符号整数(-9223372036854775808 到 9223372036854775807) | 'i8' |
uint8 | 8 位无符号整数(0 到 255) | 'u1' |
uint16 | 16 位无符号整数(0 到 65535) | 'u2' |
uint32 | 32 位无符号整数(0 到 4294967295) | 'u4' |
uint64 | 64 位无符号整数(0 到 18446744073709551615) | 'u8' |
float16 | 16 位浮点数(半精度) | 'f2' |
float32 | 32 位浮点数(单精度) | 'f4' |
float64 | 64 位浮点数(双精度) | 'f8' |
float128 | 128 位浮点数(扩展精度,取决于平台) | 'f16' |
complex64 | 64 位复数,由两个 32 位浮点数组成(实部和虚部) | 'c8' |
complex128 | 128 位复数,由两个 64 位浮点数组成(实部和虚部) | 'c16' |
complex256 | 256 位复数,由两个 128 位浮点数组成(实部和虚部,取决于平台) | 'c32' |
bool_ | 布尔类型(True 或 False) | '?' |
object_ | Python 对象类型 | 'O' |
string_ | 固定长度的字符串类型(默认长度为 1) | 'S' |
unicode_ | 固定长度的 Unicode 字符串类型(默认长度为 1) | 'U' |
更多推荐
所有评论(0)