学习numpy这一篇就够了!含泪硬肝万字总结~
Posted 我不是秃头sheep
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习numpy这一篇就够了!含泪硬肝万字总结~相关的知识,希望对你有一定的参考价值。
NumPy提供了两种基本对象:ndarray和ufunc,ndarray称为数组,而ufunc则是对数组进行处理的函数。
创建数组
numpy.array(object, dtype,copy, order, subox, ndmin)
用于创建NumPy数组
import numpy as np
"""
array(object, dtype=None, copy=True, order='K', subox=False, ndmin=0)
参数说明:
object : 数组,公开数组接口的任何对象,__array__方法返回数组的对象,或任何(嵌套)序列。
dtype : 数据类型,数组所需的数据类型。如果没有给出,那么类型将被确定为保持序列中的对象所需的最小类型。此参数只能用于“upcast”数组。对于向下转换,请使用.astype(t)方法。
copy : 如果为True(默认值),则复制对象。否则,只有当__array__返回副本,obj是嵌套序列,或者需要副本来满足任何其他要求(dtype,顺序等)时,才会进行复制。
order : 英文字母,参数可写{'K','A','C','F'},指定阵列的内存布局。如果object不是数组,则新创建的数组将按C顺序排列(行主要),除非指定了'F',在这种情况下,它将采用Fortran顺序(专业列)。如果object是一个数组,则以下成立。当copy=False出于其他原因而复制时,结果copy=True与对A的一些例外情况相同,请参阅“注释”部分。默认顺序为“K”。
subok : boolean值,如果为True,则子类将被传递,否则返回的数组将被强制为基类数组(默认)。
ndmin : int值,指定结果数组应具有的最小维数。根据需要,将根据需要预先设置形状。
满足要求的数组对象
"""
# 创建一个数组 主要参数 object、dtype、ndmin。
a1 = np.array([1,2,3])
a2 = np.array([1,2,3], dtype=float)
a3 = np.array([1,2,3], ndmin=2)
print(a1)
print(a2)
print(a3)
运行结果:
[1 2 3]
[1. 2. 3.]
[[1 2 3]]
numpy.arange(start, stop, step, dtype)
在给定间隔内返回均匀间隔的值。左闭右开区间 [起始值,终止值)
import numpy as np
# 用array(range(10)) 生成0-9的的int类型数组
a1 = np.array(range(10))
"""
numpy.arange(start, stop, step, dtype=None)
参数说明:
start 起始值
stop 终止值 生成的范围到终止值-1 例如(0,10) 生成0~9
step 步长
dtype 数据类型
"""
# a1和a2的效果一样
a2 = np.arange(10)
a3 = np.arange(0, 10)
a4 = np.arange(0, 10, 2)
a5 = np.arange(0, 10, 2, float)
print(a1)
print(a2)
print(a3)
print(a4)
print(a5)
运行结果:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
[0. 2. 4. 6. 8.]
numpy.linspace(start, stop, num)
用于返回间隔类均匀分布的数值序列。闭区间 [起始值,终止值]
import numpy as np
"""
numpy.linspace(start, stop, num)
参数说明:
start 起始值
stop 终止值
num 数量 默认值为50
"""
a1 = np.linspace(0,10)
a2 = np.linspace(0,10, 5)
print(a1)
print(a2)
运行结果:
[ 0. 0.20408163 0.40816327 0.6122449 0.81632653 1.02040816
1.2244898 1.42857143 1.63265306 1.83673469 2.04081633 2.24489796
2.44897959 2.65306122 2.85714286 3.06122449 3.26530612 3.46938776
3.67346939 3.87755102 4.08163265 4.28571429 4.48979592 4.69387755
4.89795918 5.10204082 5.30612245 5.51020408 5.71428571 5.91836735
6.12244898 6.32653061 6.53061224 6.73469388 6.93877551 7.14285714
7.34693878 7.55102041 7.75510204 7.95918367 8.16326531 8.36734694
8.57142857 8.7755102 8.97959184 9.18367347 9.3877551 9.59183673
9.79591837 10. ]
[ 0. 2.5 5. 7.5 10. ]
numpy.logspase(start,stop,num)
用于返回间隔类均匀分布的等比数列。闭区间 [起始值,终止值]
"""
numpy.logspace(start, stop, num)
参数说明:
start 起始值
stop 终止值
num 数量 默认值为50
"""
a1 = np.logspace(0,2)
a2 = np.logspace(0,2, 5)
print(a1)
print(a2)
运行结果:
[ 1. 1.09854114 1.20679264 1.32571137 1.45634848
1.59985872 1.75751062 1.93069773 2.12095089 2.32995181
2.55954792 2.8117687 3.0888436 3.39322177 3.72759372
4.09491506 4.49843267 4.94171336 5.42867544 5.96362332
6.55128557 7.19685673 7.90604321 8.68511374 9.54095476
10.48113134 11.51395399 12.64855217 13.89495494 15.26417967
16.76832937 18.42069969 20.23589648 22.22996483 24.42053095
26.82695795 29.47051703 32.37457543 35.56480306 39.06939937
42.9193426 47.14866363 51.79474679 56.89866029 62.50551925
68.6648845 75.43120063 82.86427729 91.0298178 100. ]
[ 1. 3.16227766 10. 31.6227766 100. ]
numpy.zeros(shape,dtype,order)
用于创建值全部为0的数组,即创建的数组元素全部为0
"""
numpy.zeros(shape, dtype, order)
参数说明:
shape 数组的维度
dtype 数据类型
order 指定阵列的内存布局
"""
a1 = np.zeros((5,5), dtype=int)
a2 = np.zeros((5,5), dtype=float)
print(a1)
print(a2)
运行结果:
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
numpy.eye(N,M, K,dtype,order)
用于生成主对角线为1,其余元素为0的数组
"""
numpy.eye(N,M, K,dtype,order)
参数说明:
N 数组的行数
M 数组的列数 不写默认为N
K 对角线的索引:0(默认值)指的是主对角线,正值指的是上对角线,负值指的是下对角线。
dtype 数据类型
order 指定阵列的内存布局
"""
a1 = np.eye(5, dtype=int)
a2 = np.eye(2, 3, dtype=int)
a3 = np.eye(5, 5, 0, dtype=int)
a4 = np.eye(5, 5, 1, dtype=int)
a5 = np.eye(5, 5, -1, dtype=int)
print(a1)
print(a2)
print(a3)
print(a4)
print(a5)
运行结果:
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]]
[[1 0 0]
[0 1 0]]
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]]
[[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]
[0 0 0 0 0]]
[[0 0 0 0 0]
[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]]
numpy.diag(V,K)
除了对角线以外的其他元素为0, 对角线上的元素可以是0或其他值
"""
numpy.diag(V, K)
参数说明:
V 如果是2D数组,返回k位置的对角线。
如果是1D数组,返回一个v作为k位置对角线的2维数组。
K 对角线的位置,大于零位于对角线上面,小于零则在下面。
"""
a1 = np.diag([1,2,3,4])
a2 = np.diag([1,2,3,4,5], 0)
a3 = np.diag([1,2,3,4,5], 1)
a4 = np.diag([1,2,3,4,5], -1)
print(a1)
print(a2)
print(a3)
print(a4)
运行结果:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
[[1 0 0 0 0]
[0 2 0 0 0]
[0 0 3 0 0]
[0 0 0 4 0]
[0 0 0 0 5]]
[[0 1 0 0 0 0]
[0 0 2 0 0 0]
[0 0 0 3 0 0]
[0 0 0 0 4 0]
[0 0 0 0 0 5]
[0 0 0 0 0 0]]
[[0 0 0 0 0 0]
[1 0 0 0 0 0]
[0 2 0 0 0 0]
[0 0 3 0 0 0]
[0 0 0 4 0 0]
[0 0 0 0 5 0]]
numpy.ones(shape,dtype, order)
用于创建元素全部为1的数组
"""
numpy.ones(shape, dtype, order)
参数说明:
shape 数组的维度
dtype 数据类型
order 指定阵列的内存布局
"""
a1 = np.ones((3,4), dtype=int)
a2 = np.ones((4,4), dtype=float)
print(a1)
print(a2)
运行结果:
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
数组对象的属性
属性 | 说明 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
import numpy as np
"""
数组对象的属性
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray 元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
"""
a1 = np.array([[1,2,3], [4,5,6], [7,8,9]])
print("ndim:", a1.ndim)
print("shape:", a1.shape)
print("size:", a1.size)
print("dtype:", a1.dtype)
print("itemsize:", a1.itemsize)
"""
C_CONTIGUOUS (C) 数据是在一个单一的C风格的连续段中
F_CONTIGUOUS (F) 数据是在一个单一的Fortran风格的连续段中
OWNDATA (O) 数组拥有它所使用的内存或从另一个对象中借用它
WRITEABLE (W) 数据区域可以被写入,将该值设置为 False,则数据为只读
ALIGNED (A) 数据和所有元素都适当地对齐到硬件上
UPDATEIFCOPY (U) 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新
"""
print("flags:", a1.flags)
print("real:", a1.real)
print("imag:", a1.imag)
print("data:", a1.data)
运行结果:
ndim: 2
shape: (3, 3)
size: 9
dtype: int32
itemsize: 4
flags: C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
real: [[1 2 3]
[4 5 6]
[7 8 9]]
imag: [[0 0 0]
[0 0 0]
[0 0 0]]
data: <memory at 0x000001D1BDE91860>
数组数据类型
基本数据类型
转载至https://www.cnblogs.com/mengxiaoleng/p/11616270.html
类型转换
语法:numpy.数据类型(object)
# 整型转换为浮点型
print("整型转换为浮点型:", np.float64(66))
# 浮点型转换为整型
print("浮点型转换为整型:", np.int8(66.66))
# 整型转换为布尔型 0为False 其他数为True
print("整型转换为布尔型:", np.bool(0))
# 布尔型转浮点型 True为1.0 False为0.0
print("布尔型转浮点型:", np.float64(True))
"""
运行结果:
整型转换为浮点型: 66.0
浮点型转换为整型: 66
整型转换为布尔型: False
布尔型转浮点型: 1.0
"""
创建数据类型
语法:numpy.dtype([(name, dtype, [size]),(name, dtype)…])
"""
创建一个数据类型,存储图书信息
需求:
1.能存储50个字符的字符串 记录书名
2.用一个64位的整数 记录库存
3.用一个64位的单精度浮点数 记录价格
"""
book_type = np.dtype([("name", np.str_, 50), ("count", np.int64), ("price", np.float64)])
print("数据类型为:", book_type)
运行结果:
数据类型为: 以上是关于学习numpy这一篇就够了!含泪硬肝万字总结~的主要内容,如果未能解决你的问题,请参考以下文章
2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了
2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了