Numpy入门02---ndarray多维数组对象(上)

NumPy的核心特征之一就是N-维数组对象——ndarray。该数组允许你使用类似于标量的操作语法在整块数据上进行数学计算。

接下来让我们举个例子感受一下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import numpy as np

# 生成随机数组
data = np.random.randn(2,3)
print(data)

# 给数组加上一个数学操作

print(data * 10)
print(data + data)

结果如下:

ndarray是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray中比较重要的属性

01 创建ndarray

我们常用的最简单的创建数组的方式就是使用array函数。

array函数可以将一个序列型对象转换成为NumPy数组。例如:

data_list = [6, 7.5, 8, 0, 1]
arr_list = np.array(data_list)
print(arr_list)

结果:

array函数还会将嵌套序列,自动转换成多维数组。

data_list2 = [[1,2,3,4],[5,6,7,8]]
arr_list2 = np.array(data_list2)
print(arr_list2)
# 因为data_list2是一个包含列表的列表,所以NumPy数组arr_list2形成了一个二维数组
# 我们可以通过shape和ndim(ndim:秩,即轴的数量或维度的数量)确定
print(arr_list2.shape)
print(arr_list2.ndim)

输出:

arange是Python内建函数range的数组版。

其他可以创建数组的函数有:

numpy.empty

创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组,注意 − 数组元素为随机值,因为它们未初始化。

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充。

numpy.ones

创建指定形状的数组,数组元素以 1 来填充:

empty_arr = np.empty((3,4),dtype=int)
print(empty_arr)

zero_arr = np.zeros((2,3))
print(zero_arr)

one_arr = np.ones((4,4))
print(one_arr)

numpy.linspace

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数说明:

numpy.logspace

numpy.logspace 函数用于创建一个于等比数列。格式如下:

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

参数说明:

02 ndarray的数据类型

数据类型,即dtype,是一个特殊的对象。它包含了ndarray需要为某一种类型的数据所申明的内存块信息。

Numpy常用的数据类型:

可以使用astype方法来显式地转换数组的数据类型。

03 NumPy数组算术

向量化——可以对数组进行批量操作而无须任何for循环的特性。

num = np.array([[1,2,3,4],[5,6,7,8]])
print(num)
print(num + num)
print(num * num)
print(1 / num)
print(num ** 0.5)

输出如下:

同尺寸数组之间比较,会产生一个布尔值
num2 = np.random.randint(100,size=(2,4))
print(num2 > num)

结果如下:

不同数组之间的操作,会用到广播特性

04 广播特性

广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在相应的元素上进行。

如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。

较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:

a = np.array([[0, 0, 0],
          [10, 10, 10],
          [20, 20, 20],
          [30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b)

下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。

广播的规则:

  • 对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略)
  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

转载于:https://my.oschina.net/u/3938912/blog/3098795

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值