python三大库之--numpy(二)

python三大库之–numpy(二)


五,切片

ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样;

  • 在 Python 中,slice 可以作为一个对象来使用。你可以创建一个 slice 对象,然后使用它来获取序列的片段。

参数:

  • start 是切片开始的位置(包含该位置)。
  • stop 是切片结束的位置(不包含该位置)。
  • step 是切片的步长,即选取元素的间隔。
#numpy切片
def a1():
    b=np.arange(10)
    x= slice(1,len(b),2)
    print(b)
    print(x)
    print(b[x])

a1()

[0 1 2 3 4 5 6 7 8 9]
slice(1, 10, 2)
[1 3 5 7 9]

六,高级索引

NumPy 中的高级索引指的是使用整数数组、布尔数组或者其他序列来访问数组的元素。相比于基本索引,高级索引可以访问到数组中的任意元素,并且可以用来对数组进行复杂的操作和修改。

6.1.整数数组索引

整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。

适用于需要访问非连续元素或特定位置元素的场景。

注意:返回的新数组是一个副本,修改它不会影响原数组。

  • 案例,取出一个矩阵的四角
def two():
    array_one = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
    print('原数组:\n',array_one)
    array_one = array_one[[0,0,-1,-1], [0,-1,0,-1]]
    print('这个数组的四个角元素是:')
    print(array_one)
原数组:
 [[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
这个数组的四个角元素是:
[ 0  2  9 11]

6.2 布尔索引

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

arr = np.array([1,2,3,4,5,6,7,8,9,10])
bool_arr = arr > 5
print(bool_arr)
print(arr[bool_arr])

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a[:,a[1]>3])
[False False False False False  True  True  True  True  True]
[ 6  7  8  9 10]
[[1 2 3]
 [4 5 6]
 [7 8 9]]

七,广播

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。这要求维数相同,且各维度的长度相同,如果不相同,可以通过广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度。

  • 维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。

arr = np.array([[1,2,3],[4,5,6]])
brr = np.array([[10,20,30]])
crr = arr + brr
print(crr)

[[11 22 33]
 [14 25 36]]
  • 形状匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。
d = np.array([[1], [2]])  # 形状: (2, 1)
e = np.array([10, 20, 30])  # 形状: (3,)
f = d + e
print(f)
[[11 21 31]
 [12 22 32]]
  • 案例 一维数组与标量
a = np.array([1,2,3])
b= 2
c= a+b
print(c)

[3 4 5]
  • 二维数组与一维数组
a= np.array([[1,2,3],[4,5,6]])
b= np.array([10,20,30])
c= a+b
print(c)
[[11 22 33]
 [14 25 36]]
  • 二维数组与二维数组
a= np.array([[1,2,3],[4,5,6]])
b= np.array([[10,20,30],[40,50,60]])
c= a+b
print(c)

[[11 22 33]
 [44 55 66]]
  • 广播失败
a= np.array([[1,2,3],[4,5,6]])
b= np.array([10,20,30],[40,50,60],[70,80,90])
c= a+b
print(c)
Traceback (most recent call last):
  File "f:\hqyj\python三大库代码\索引操作.py", line 59, in <module>
    b= np.array([10,20,30],[40,50,60],[70,80,90])
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: array() takes from 1 to 2 positional arguments but 3 were given

八,遍历数组

8.1 遍历数组的第一维度

for i in arr: 遍历数组的第一维度,即按行或列的顺序逐个访问元素

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
for i in arr:
    print(i)
操作.py
[1 2 3]
[4 5 6]

8.2 nditer逐个访问元素

nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效

8.2.1 order参数

arr = np.array([[1,2,3],[4,5,6]])
for i in np.nditer(arr,order='F'):
    print(i)

arr = np.array([[1,2,3],[4,5,6]])
for i in np.ndi

1
4
2
5
3
6
1
2
3
4
5
6

8.2.2 flags参数

flags 参数用于指定迭代器的额外行为。

  • multi_index: 返回每个元素的多维索引。
  • external_loop: 返回一维数组而不是单个元素,减少函数调用的次数,从而提高性能。
arr = np.array([[1,2,3],[4,5,6]])
it = np.nditer(arr,flags=['multi_index'])
for i in it:
    print(i)
    print(it.multi_index)
1
(0, 0)
2
(0, 1)
3
(0, 2)
4
(1, 0)
5
(1, 1)
6
(1, 2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值