您的位置:首页 > 编程语言 > Python开发

python numpy学习

2017-07-08 14:04 232 查看
创建ndarray数组:

#创建ndarray
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
print(arr2.shape)#判断矩阵行列
print(arr1.dtype)#判断数据类型
print(np.ones((3, 3)))#创建3*3全是1的矩阵
print(np.arange(15))#数组版内置函数range
print(np.eye(3))#创建单位矩阵

ones、ones_like:根据指定的形状和dtype创建一个全1数组。

empty、empty_like:创建新数组,只分配内存空间但不填充任何值。

dtype:

arr = np.array([1, 2, 3, 4, 5])
float_arr = arr.astype(np.float64)#通过astype方法转换arr的dtype
print(float_arr.dtype)

arr1 = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
print(arr1)
print(arr1.astype(np.int32))

int_array = np.arange(10)
calibers = np.array([.22, .270, .357, .380, .44], dtype=np.float64)
print(int_array.astype(calibers.dtype))调用astype无论如何都会创建一个新的数组(原始数据的一份拷贝),即使新dtype跟老dtype相同也是如此。

数组和标量之间的运算:

arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr * arr
arr - arr
1 / arr
arr + arr
arr ** 0.5
基本的索引和切片:
arr = np.arange(10)
print(arr[5])#取出第六个数据
arr[5:8] = 12#将索引的三个数据赋值
print(arr)
arr_slice = arr[5:8]
arr_slice[1] = 250
print(arr)

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d[0][2])

arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr3d[0])
print(arr3d[1, 0])#访问索引以(1, 0)开头的那些值
切片索引:
arr2d = ([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d[:2])#输出0行和1行
print(arr2d[:2, 1:])#输出0行,1行和2列及3列的范围值“只有冒号”表示选取整个轴

布尔型索引:

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)
print(names == 'Bob')
print(data[names == 'Bob'])
print(data[names == 'Bob', 2:])
print(data[names == 'Bob', 3])
mask = (names == 'Bob') | (names == 'Will')
print(mask)
#Python关键字and和or在布尔型数组中无效
#还可以用于数组设置值
data[data < 0] = 0
print(data)

花式索引:

指的是利用整数数组进行索引。

arr = np.empty((8, 4))
for i in range(8):
arr[i] = i
print(arr)
print(arr[[4, 3, 0, 6]])#直接索引某一行,形成矩阵(传入指定顺序的整数或ndarray都可以)
arr1 = np.arange(32).reshape((8, 4))#reshape方法将生产的range数列构成了一个8*4的矩阵
print(arr1)
print(arr1[[1, 5, 7, 2], [0, 3, 1, 2]])#第一个数组索引矩阵的行,第二个数组索引矩阵的列
print(arr1[[1, 5, 7, 2]][:, [0, 3, 1, 2]])#第一个矩阵是索引arr1矩阵的行,然后通过第二个矩阵中的:索引所有列,通过一个数组对数据进行排序
print(arr1[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])])#np.ix_()方法可以将两个一维整数数组转换为一个用于选取方形区域的索引器


通用函数:快速的元素级数组函数





利用数组进行数据处理
#计算函数上的sqrt(x^2 + y^2)
#meshgrid函数可以接受两个一维数组,并产生两个二维数组,对应于两个数组中所有的(x, y)对
points = np.arange(-5, 5, 0.01)
xs, ys = np.meshgrid(points, points)
print(xs)
import matplotlib.pyplot as plt
z = np.sqrt(xs ** 2 + ys ** 2)
print(z)
plt.figure()
plt.plot(z, 'r--', linewidth=1.0, alpha=0.5)
plt.show()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy python