本篇文章主要是讲解numpy的创建与打印输出,首先导入numpy库
import numpy as np
用numpy创建数组的几种方式
- 使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推 导出来的
# a = np.array(1,2,3,4) 一个常见的错误,就是调用array的时候传入多个数字参数,而不是提供单个数字的列表类型作为参数。
a = np.array([2,3,4])
print("a",a,a.dtype)
b = np.array([1.2, 3.5, 5.1])
print("b",b,b.dtype)
#array 还可以将序列的序列转换成二维数组,将序列的序列的序列转换成三维数组,等等。
b = np.array([(1.5,2,3), (4,5,6)])
print("b",b,b.dtype)
#也可以在创建时显式指定数组的类型
c = np.array( [ [1,2], [3,4] ], dtype=complex )
print("c",c,c.dtype,c.itemsize)
运行结果如下:
a [2 3 4] int32
b [1.2 3.5 5.1] float64
b [[1.5 2. 3. ]
[4. 5. 6. ]] float64
c [[1.+0.j 2.+0.j]
[3.+0.j 4.+0.j]] complex128 16
- 为了创建数字组成的数组,NumPy提供了一个类似于range的函数arange,该函数返回数组而不是列表。
a=np.arange( 10, 30, 5 )#包含起始值(默认值是0),不包含终止值,最后一个参数是步长,默认值是1
print(type(a),a)#[10 15 20 25]
a=np.arange( 0, 2, 0.3 )#包含起始值,不包含终止值,最后一个参数是步长
print(type(a),a)#[0. 0.3 0.6 0.9 1.2 1.5 1.8]
运行结果如下:
<class 'numpy.ndarray'> [10 15 20 25]
<class 'numpy.ndarray'> [0. 0.3 0.6 0.9 1.2 1.5 1.8]
3.针对浮点数,通常最好使用linspace函数来明确传入我们想要的元素数量
from numpy import pi
import matplotlib.pyplot as plt#约定俗成的写法plt ,Matplotlib程序包后续会讲到
num=np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
print(num.dtype,num)
x = np.linspace( 0, 2*pi, 100 ) # useful to evaluate function at lots of points
f = np.sin(x)
plt.plot(x,f)
plt.show()
运行结果如下:
float64 [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
4.通常,数组的元素最初是未知的,但它的大小是已知的,NumPy提供了几个函数来创建具有初始占位符内容的数组。这就减少了数组增长的必要,因为数组增长的操作花费很大
#函数zeros创建一个由0组成的数组,
a=np.arange(15).reshape(3,5)
zero = np.zeros((3,4))
print(zero.dtype,zero)
zeros_like=np.zeros_like(a)#带like的用参数a的维度
print(zeros_like.dtype,zeros_like)
#函数 ones创建一个完整的数组,
ones = np.ones((3,4))
print(ones.dtype,ones)
#函数empty 创建一个数组,其初始内容是随机的,取决于内存的状态。默认情况下,创建的数组的dtype是 float64 类型的。
empty = np.empty((3,4))
print(empty.dtype,empty)
运行结果如下:
float64 [[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
int32 [[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
float64 [[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
float64 [[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
数组的打印
1.打印数组的各种属性
a=np.arange(15).reshape(3,5)
#ndarray.ndim - 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank
print("数组的轴(维度)的个数:",a.ndim)
#ndarray.shape - 数组的维度。这是一个整数的元组,表示每个维度中数组的大小
print("数组的维度:",a.shape)
#ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积
print("数组元素的总个数:",a.size)
#ndarray.dtype - 一个描述数组中元素类型的对象
print("数组元素的类型:",a.dtype)
#ndarray.itemsize - 数组中每个元素的字节大小。
#例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。
#它等于 ndarray.dtype.itemsize
print("数组中每个元素的字节大小:",a.itemsize,a.dtype.itemsize)
#ndarray.data - 该缓冲区包含数组的实际元素。class 'memoryview'
print("该缓冲区包含数组的实际元素:",a.data,type(a.data))
输出结果如下:
数组的轴(维度)的个数: 2
数组的维度: (3, 5)
数组元素的总个数: 15
数组元素的类型: int32
数组中每个元素的字节大小: 4 4
该缓冲区包含数组的实际元素: <memory at 0x00000091BD96CEA0> <class 'memoryview'>
- 打印数据
#将一维数组打印为行,将二维数据打印为矩阵,将三维数据打印为矩数组表
c = np.arange(24).reshape(2,3,4)
print(c)
#如果数组太大而无法打印,NumPy会自动跳过数组的中心部分并仅打印角点
print(np.arange(10000))
print(np.arange(10000).reshape(100,100))
#要禁用此行为并强制NumPy打印整个数组,可以使用更改打印选项set_printoptions。
import sys
# np.set_printoptions(threshold=sys.maxsize) # sys module should be imported禁用
np.set_printoptions(threshold=1000) # sys module should be imported 解除禁用
print(np.arange(100).reshape(10,10))
打印结果如下:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
[ 0 1 2 ... 9997 9998 9999]
[[ 0 1 2 ... 97 98 99]
[ 100 101 102 ... 197 198 199]
[ 200 201 202 ... 297 298 299]
...
[9700 9701 9702 ... 9797 9798 9799]
[9800 9801 9802 ... 9897 9898 9899]
[9900 9901 9902 ... 9997 9998 9999]]
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29]
[30 31 32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47 48 49]
[50 51 52 53 54 55 56 57 58 59]
[60 61 62 63 64 65 66 67 68 69]
[70 71 72 73 74 75 76 77 78 79]
[80 81 82 83 84 85 86 87 88 89]
[90 91 92 93 94 95 96 97 98 99]]