numpy-03-索引和切片

这篇博客介绍了NumPy库中对数组的索引、切片操作,包括选取单行、多行、单列、多列以及不连续的行和列。同时,展示了如何修改数组元素,如将特定范围内的数值置零,以及使用三元运算符`where`进行条件赋值。此外,还提及了Python中的三元运算符和数组裁剪函数`clip`的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接

索引和切片

import numpy as np

uk = "./loadtxt/UK_video_data_numbers.csv"
us = "./loadtxt/XXXX.csv"

t1 = np.loadtxt(uk, delimiter=",", dtype="int64")

# print(t1)

"""
他们都是ndarray类型的
"""
# 取某一行
print(t1[2])
print(t1[2, :])
print("*" * 100)
# 取连续多行
print(t1[2:4])
print(t1[2:4, :])
print("*" * 100)
# 取不连续多行
print(t1[[1, 3, 4]])
print(t1[[1, 3, 4], :])
print("*" * 100)


# 取某一列
print(t1[:, 1])
print("+" * 100)
# 取连续多列
print(t1[:, 1:3])
print("+" * 100)
# 取不连续多列
print(t1[:, [1, 3]])
print("+" * 100)


# 取多行和多列
# 2行3列
print(t1[2, 3])
print(type(t1[2, 3]))
print("-" * 100)
# 3——6行、1——3列
print(t1[3:6, 1:3])
print("-" * 100)
# 某些行、某些列的点 (1, 1)、 (3, 3)
print(t1[[1, 3], [1, 3]])
print("-" * 100)

修改数值

import numpy as np
import random

t1 = np.array([random.randint(0, 2000) for i in range(100)]).reshape((10, 10))

# 第1行到第2行、第1列到第2列改为 0
t1[1: 3, 1: 3] = 0
print(t1)
print("*" * 100)

# 输出每个数字是否大于1000
print(t1 < 1000)
print("*" * 100)

# 输出小于1000的数字
print(t1[t1 < 1000])
print("*" * 100)

# 将小于1000的改为-1
t1[t1 < 1000] = -1
print(t1)
print("*" * 100)

输出

[[1319  602 1554  498  140  206 1754 1346  880  959]
 [1092    0    0  357 1626 1525  882 1967 1254  871]
 [1457    0    0 1217  449 1606  278 1381 1968  416]
 [1538 1242 1548  859  639  918  326 1609 1287 1033]
 [1190  643 1070 1780 1898 1563 1139  828 1666  356]
 [ 178 1182 1411   37  718 1759 1911  893  919  594]
 [  61  334 1736 1362 1015  174  612  550  498 1167]
 [ 965 1076 1818  307 1811  847 1864 1930  983  700]
 [ 415  902 1742 1141 1841 1984  690 1123 1424 1396]
 [ 364 1626  463  140  591  465  874 1421 1903  102]]
****************************************************************************************************
[[False  True False  True  True  True False False  True  True]
 [False  True  True  True False False  True False False  True]
 [False  True  True False  True False  True False False  True]
 [False False False  True  True  True  True False False False]
 [False  True False False False False False  True False  True]
 [ True False False  True  True False False  True  True  True]
 [ True  True False False False  True  True  True  True False]
 [ True False False  True False  True False False  True  True]
 [ True  True False False False False  True False False False]
 [ True False  True  True  True  True  True False False  True]]
****************************************************************************************************
[602 498 140 206 880 959   0   0 357 882 871   0   0 449 278 416 859 639
 918 326 643 828 356 178  37 718 893 919 594  61 334 174 612 550 498 965
 307 847 983 700 415 902 690 364 463 140 591 465 874 102]
****************************************************************************************************
[[1319   -1 1554   -1   -1   -1 1754 1346   -1   -1]
 [1092   -1   -1   -1 1626 1525   -1 1967 1254   -1]
 [1457   -1   -1 1217   -1 1606   -1 1381 1968   -1]
 [1538 1242 1548   -1   -1   -1   -1 1609 1287 1033]
 [1190   -1 1070 1780 1898 1563 1139   -1 1666   -1]
 [  -1 1182 1411   -1   -1 1759 1911   -1   -1   -1]
 [  -1   -1 1736 1362 1015   -1   -1   -1   -1 1167]
 [  -1 1076 1818   -1 1811   -1 1864 1930   -1   -1]
 [  -1   -1 1742 1141 1841 1984   -1 1123 1424 1396]
 [  -1 1626   -1   -1   -1   -1   -1 1421 1903   -1]]
****************************************************************************************************

三元运算符 where

print(np.where(t1 < 1000, 0, 10))

输出

[[10 10  0 10 10 10 10 10  0  0]
 [10  0  0 10  0  0 10  0  0 10]
 [10  0  0  0 10 10 10 10 10 10]
 [ 0 10 10 10 10 10 10  0  0  0]
 [ 0  0  0 10 10  0 10 10 10  0]
 [10 10  0 10 10 10  0 10  0 10]
 [ 0 10 10  0 10 10 10 10  0  0]
 [ 0 10 10 10  0 10 10  0 10  0]
 [10  0  0  0 10 10 10  0 10  0]
 [ 0 10  0  0  0  0 10 10  0 10]]
补充python中的三元运算符
a = 3 if 3 < 2 else 2
a
Out[10]: 2

clip裁剪

t.clip(100, 500):小于100的替换为100、大于500的替换为500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值