NumPy基础--ndarray


创建ndarray

1. 使用array函数
data1 = [[1,2,3,4],[5,6,7,8]]
arr1 = np.array(data1)
>> print arr1
array([[1,2,3,4],
          [5,6,7,8]])
>> print arr1.ndim
2
>> print arr1.shape
(2,4)
>> print arr1.dtype
dtype('int64')
2. 使用数组创建函数
函数说明
array将输入数据(列表、元组、数组或其他序列类型)转换为ndarray
asarray将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制
arange类似于内置的range,但返回一个ndarray而不是列表
ones、ones_like根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,根据其形状和dtype创建一个全1数组
zeros、zeros_like同上,产生全0数组
empty、empty_like创建新数组,只分配内存空间但不填充值
eye、identity创建一个正方的N * N单位矩阵(对角线为1,其余0)

例如:

np.zeros(5)
np.zeros((3, 6))
np.empty((2, 3, 2))
np.arange(10)

ndarray的数据类型

通过astype方法显示地转换其dtype

arr = np.array([1.2, 3.7, -2.6, 0.5])
>> arr.dtype
dtype('float64')
arr.astype(np.int32)
>> arr
array([1, 3, -2, 0], dtype=int32)

也可以直接调用已有的数组dtype

arr1 = np.arange(10)
arr2 = np.array([1, 2, 3], dtype=np.float64)
arr1.astype(arr2.dtype)

索引和切片

1. 基本的索引和切片
# 一维数组
arr = np.arange(10)
>> arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>> arr[5:8]
array([5, 6, 7])
arr[5:8] = 12
>> arr
array([0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
# 数组切片是原始数组的视图,意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上
arr_slice = arr[5:8]
arr_slice[1] = 123
>> arr
array([0, 1, 2, 3, 4, 12, 123, 12, 8, 9])
# 如果想得到的是切片的一份副本而非视图,就要显式地进行复制操作
arr_slice = arr[5:8].copy()
# 多维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>> arr2[0]
array([1, 2, 3])
>> arr2[0, 2]
3
>> arr2[:2]
array([1, 2, 3],
      [4, 5, 6])
>> arr2[:2, 1:]
array([2, 3],
      [5, 6])
2. 布尔型索引
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = randn(7, 4)   #randn生成正态分布的随机数据
>> data
array([[-0.048, 0.5433, -0.2349, 1.2792],
       [-0.268, 0.5465, 0.0939, -2.0445],
       [-0.047, -2.026, 0.7719, 0.3103],
       [2.1452, 0.8799, -0.0523, 0.0672],
       [-1.0023, -0.1698, 1.1503, 1.7289],
       [0.1913, 0.4544, 0.4519, 0.5535],
       [0.5994, 0.8174, -0.9297, -1.2564]])
>> names == 'Bob'
array([ True, False, False, True, False, False, False], dtype=bool)
# 这个布尔型数组可用于数组索引,布尔型数组长度必须和索引的轴长度一致
>> data[names == 'Bob']
array([[-0.048, 0.5433, -0.2349, 1.2792],
       [2.1452, 0.8799, -0.0523, 0.0672]])
# 可以使用不等于符号,负号,对条件进行否定
data[names != 'Bob']
data[-(names == 'Bob')]
# 可以将data中所有负值设为0
data[data < 0] = 0
3. 花式索引
arr = np.arange(32).reshape((8, 4))
>> arr
array([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])
# 选取元素(1,0) (5,3) (7,1) (2,2)
>> arr[[1, 5, 7, 2],[0, 3, 1, 2]]
array([4, 23, 29 , 10])
# 选取矩阵的行列子集
>> arr[[1, 5, 7, 2],[ : , 0, 3, 1, 2]]
array([[4, 7, 5, 6],
       [20, 23, 21, 22],
       [28,31, 29, 30],
       [8, 11, 9, 10]])
# 使用np.ix_函数,它可以将两个一维证书数组转换为一个用于选取方形区域的索引器
>> arr[np.ix_([1, 5, 7, 2],[0, 3, 1, 2])]
array([[4, 7, 5, 6],
       [20, 23, 21, 22],
       [28,31, 29, 30],
       [8, 11, 9, 10]])

数组转置和轴对换

1. T属性
arr = np.random.randn(6, 3)
np.dot(arr.T, arr)  #np.dot计算矩阵内积
2. transpose函数
arr = np.arange(16).reshape((2, 2, 4))
>> arr
arrary([[[0, 1, 2, 3],
         [4, 5, 6, 7]],
        [[8, 9, 10, 11],
         [12, 13, 14, 15]]])
>> arr.transpose((1, 0, 2))
arrary([[[0, 1, 2, 3],
         [8, 9, 10, 11]],
        [[4, 5, 6, 7],
         [12, 13, 14, 15]]])
3. swapaxes函数(轴对换)
>> arr
array([[0, 1, 2, 3],
       [4, 5, 6, 7]],
      [[8, 9, 10, 11],
       [12, 13, 14, 15]])
# 把轴1,2进行互换, 原本的shape(2,2,4)变为(2,4,2)
>> arr.swapaxes(1, 2)
array([[[0, 4],
        [1, 5],
        [2, 6],
        [3, 7]],
      [[8, 12],
        [9, 13],
        [10, 14],
        [11, 15]]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值