欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python numpy數組元素的訪問及數組的增刪改查功能詳解

 更新時間:2025年05月26日 10:14:26   作者:weixin_48668114  
這篇文章主要介紹了Python numpy數組元素的訪問及數組的增刪改查,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

numpy ndarray數組元素的訪問及數組的增刪改查

ndarray數組元素的訪問

  • ?? ndarray 切片操作的基本語法和列表類似,為 arr[start:stop:step],其中 star、stop 和 step 是可選參數。
  • ?? 對于多維數組,每個維度都可以單獨指定切片范圍,語法為 arr[dim1_start:dim1_stop:dim1_step, dim2_start:dim2_stop:dim2_step, …]。
  • ?? start:切片起始索引,包含該索引對應的元素,默認值為 0。負數索引表示從數組末尾開始計數。
  • ?? stop:切片結束索引,不包含該索引對應的元素,默認值為數組的長度。負數索引表示從數組末尾開始計數。
  • ?? step:切片步長,默認值為 1。正數表示從左到右選取元素,負數表示從右到左選取元素。
  • ?? 得到的結果仍是ndarray。

一維ndarray的元素訪問

?? 0個冒號的,stop

code:
import numpy as np
nd1 = np.array(range(8))
print("nd1[3]: %d, nd1[-2]: %d" % (nd1[3], nd1[-2]))
result:
nd1[3]: 3, nd1[-2]: 6

?? 1個冒號的,start and stop

code:
import numpy as np
nd1 = np.array(range(8))
print("nd1[:3]: %s, nd1[2:4]: %s, nd1[4:]: %s, nd1[:]: %s" % (nd1[:3], nd1[2:4], nd1[4:], nd1[:]))
result:
nd1[:3]: [0 1 2], nd1[2:4]: [2 3], nd1[4:]: [4 5 6 7], nd1[:]: [0 1 2 3 4 5 6 7]

?? 2個冒號的,start,stop,step

code:
import numpy as np
nd1 = np.array(range(8))
import numpy as np
nd1 = np.array(range(8))
print("nd1[::3]: %s, nd1[2::4]: %s, nd1[:4:]: %s, nd1[:6:2]: %s,"% (nd1[::3], nd1[2::4], nd1[:4:], nd1[:6:2]))
print("nd1[2:5:]: %s,  nd1[1::]: %s, nd1[1:7:3]: %s, nd1[::]: %s" % (nd1[2:5:],  nd1[1::], nd1[1:7:3], nd1[::]))
result:
nd1[::3]: [0 3 6], nd1[2::4]: [2 6], nd1[:4:]: [0 1 2 3], nd1[:6:2]: [0 2 4],
nd1[2:5:]: [2 3 4],  nd1[1::]: [1 2 3 4 5 6 7], nd1[1:7:3]: [1 4], nd1[::]: [0 1 2 3 4 5 6 7]

二維ndarray的元素訪問

??訪問單個元素,[行,列]指明要訪問的元素的行列

code:
import numpy as np
nd1 = np.array([[1, 2, 3], [4, 5, 6]])
print("nd1[1,2]: %s" % nd1[1, 2])
result:
nd1[1,2]: 6
  • ??[]訪問一行或者多行
  • ??[]中一個數指行,有逗號,逗號前指行,后指列
  • ??行和列分別可以用切片,列表標識多行或者多列
code:
import numpy as np
nd1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("nd1[1]: %s", nd1[1])  # 一個參數指行
print("nd1[1, :]", nd1[1, :])  # 用中間逗號的方式指定行和列
print("nd1[0:2, :]", nd1[0:2, :])  # 用切片的方式指定多行
print("nd1[[0,1], :]", nd1[0:2, :])  # 用列表的方式指定多行
result:
nd1[1]: [4 5 6]
nd1[1, :]: [4 5 6]
nd1[0:2, :]: [[1 2 3]
 [4 5 6]]
nd1[[0,1], :]: [[1 2 3]
 [4 5 6]]
  • ??訪問一列或者多列
  • ??訪問某一列[:, 列號]
  • ??訪問某一列[:, 切片或者列表]訪問多列
code:
import numpy as np
nd1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("nd1[:, :]:", nd1[:, :])  # 所有行, 所有列
print("nd1[:, 1]:", nd1[:, 1])  # 第1列
print("nd1[1, 0:2]:", nd1[1, 0:2])  # 第一行的0列和1列
print("nd1[[0,1], [0, 2]]:", nd1[[0, 1], [0, 2]])  # 第一行的0列和1列
result:
nd1[:, :]: [[1 2 3]
 [4 5 6]
 [7 8 9]]
nd1[:, 1]: [2 5 8]
nd1[1, 0:2]: [4 5]
nd1[[0,1], [0, 2]]: [1 6]

ndarray數組元素的增刪改查

ndarray數組元素的增加 np.append

-??np.append(arr, values, axis=None),values為要添加的數組,注意要和arr的shape匹配才能添加。

??生成新的數據,原數據不變,values為要添加的數組,注意要和arr的shape匹配才能添加。

code:
import numpy as np
nd1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
nd2 = [[11, 22, 33]]  # 上下方向添加, 要是一行數據的形式
nd3 = [[44, 444], [55, 555], [66, 666]]
new_nd1 = np.append(nd1, nd2, axis=0)  # 上下方向添加
print(new_nd1)
new_nd2 = np.append(nd1, nd3, axis=1)  # 左右方向添加
print(new_nd2)
result:
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [11 22 33]]
[[  1   2   3  44 444]
 [  4   5   6  55 555]
 [  7   8   9  66 666]]

np.insert

-?? np.insert() 函數可以在數組的指定位置插入值,返回一個新的數組。
-?? np.insert(arr, obj, values, axis=None)

code:
import numpy as np
nd1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# insert(arr, obj, values, axis=None)
nd2 = np.insert(nd1, 1, [11, 22, 33], axis=0)
nd3 = np.insert(nd2, 3, [[44, 55, 66]], axis=0)
nd4 = np.insert(nd1, 1, [11, 22, 33], axis=1)
nd5 = np.insert(nd4, 3, [[44, 55, 66]], axis=1)
print("nd3:\n", nd3)
print("nd5:\n", nd5)
result:
nd3:
 [[ 1  2  3]
 [11 22 33]
 [ 4  5  6]
 [44 55 66]
 [ 7  8  9]]
nd5:
 [[ 1 11  2 44  3]
 [ 4 22  5 55  6]
 [ 7 33  8 66  9]]

np.concatenate

  • ?? np.concatenate() 函數可以將多個數組沿著指定的軸連接在一起,實現數據的合并。
  • ??返回一個新的數組,原數組不會被修改。
code:
import numpy as np
# 一維數組拼接
arr_1d_1 = np.array([1, 2, 3])
arr_1d_2 = np.array([4, 5, 6])
new_arr_1d = np.concatenate((arr_1d_1, arr_1d_2))  # 一維數字組拼接不用指定axis
print("一維數組拼接后的結果:", new_arr_1d)
# 二維數組拼接
arr_2d_1 = np.array([[1, 2], [3, 4]])
arr_2d_2 = np.array([[5, 6], [7, 8]])
# 垂直拼接
new_arr_2d_vertical = np.concatenate((arr_2d_1, arr_2d_2), axis=0)  # 垂直方向上拼接
print("\n二維數組垂直拼接后的結果:")
print(new_arr_2d_vertical)
# 水平拼接
new_arr_2d_horizontal = np.concatenate((arr_2d_1, arr_2d_2), axis=1)  # 水平方向上拼接
print("\n二維數組水平拼接后的結果:")
print(new_arr_2d_horizontal)
result:
一維數組拼接后的結果: [1 2 3 4 5 6]
二維數組垂直拼接后的結果:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
二維數組水平拼接后的結果:
[[1 2 5 6]
 [3 4 7 8]]

np.hstack和np.vstack

  • ?? np.hstack(tup1,tup2,…),注意參數的類型。
  • ?? 參數tup是一個元組、列表或其他可迭代對象,其中包含了要進行水平拼接的多個數組。
  • ?? np.vstack(tup1,tup2),和np.hstack不同的是拼接的方向不同。
code:
import numpy as np
nd1 = np.array([[1, 2], [3, 4], [5, 6]])
nd2 = np.array([[11, 22], [33, 44], [55, 66]])
print("hstack: ", np.hstack((nd1, nd2)))
print("vstack: ", np.vstack((nd1, nd2)))
result:
hstack:  [[ 1  2 11 22]
 [ 3  4 33 44]
 [ 5  6 55 66]]
vstack:  [[ 1  2]
 [ 3  4]
 [ 5  6]
 [11 22]
 [33 44]
 [55 66]]

ndarray數組元素的刪除

np.delete()刪除指定位置的元素

-?? NumPy 數組是固定大小的,直接刪除元素通常會創(chuàng)建一個新數組。
-?? 刪除一維數組元素,np.delete(arr1, idx),指定位置為idx。
-?? 刪除二維數組元素,np.delete(arr1, idx, axis=0/1),指定位置為idx,按行或者列要指定axis。

code:
import numpy as np
arr1 = np.array(range(5))
arr2 = np.delete(arr1, [0,4])
arr3 = np.delete(arr1, 2)
print(arr1)
print(arr2)
print(arr3)
result:
import numpy as np
arr1 = np.array(range(5))
arr2 = np.delete(arr1, [0,4])
arr3 = np.delete(arr1, 2)
print(arr1)
print(arr2)
print(arr3)
code:
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.delete(arr1, 1, axis=0)  # 刪除第2行(索引1)
arr3 = np.delete(arr1, [1,2], axis=0)  # 刪除第2行(索引1)
print("arr1:\n",arr1)
print("arr2:\n",arr2)
print("arr3:\n",arr3)
result:
arr1:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]
arr2:
 [[1 2 3]
 [7 8 9]]
arr3:
 [[1 2 3]]

根據條件刪除元素(過濾)

  • ?? 使用布爾索引創(chuàng)建符合條件的新數組
  • ?? 類似于(arr1>1) & (arr1<5)的表達式生成一個布爾數組。
code:
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6])
condition = (arr1>1) & (arr1<5)
arr2 = arr1[condition]
print("arr1\n", arr1)
print(condition)
print("arr2\n", arr2)
result:
arr1
 [1 2 3 4 5 6]
[False  True  True  True False False]
arr2
 [2 3 4]

np.unique刪除重復元素

?? 刪除重復元素,并重新排序

code:
import numpy as np
arr = np.array([1, 2, 2, 3, 3, 3, 5, 5, 4, 4])
unique_arr = np.unique(arr)
print(type(unique_arr), unique_arr)
result:
<class 'numpy.ndarray'> [1 2 3 4 5]

修改ndarray中的元素

直接索引賦值

?? 支持一維和多維

code:
import numpy as np
arr1 = np.array([10, 20, 30, 40])
arr1[2] = 300
arr1[-1] = 400
print("arr1:\n", arr1)
arr2 = np.array([[1, 2], [3, 4]])
arr2[0, 1] = 20
print("arr2:\n", arr2)
result:
arr1:
 [ 10  20 300 400]
arr2:
 [[ 1 20]
 [ 3  4]]

切片賦值

  • ?? 通過切片選擇多個元素,批量修改值。
  • ?? 賦值時需要確保右側值的形狀與切片形狀兼容。
code:
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
arr1[1:4] = [20, 30, 40]
print("arr1:\n", arr1)
arr2 = np.array([1, 2, 3, 4, 5])
arr2[1:4] = 0  # 賦值為同一個數
print("arr2:\n", arr2)
arr3 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr3[:, 2] = [20, 50, 80]  # 修改第2列
print("arr3:\n", arr3)
result:
arr1:
 [ 1 20 30 40  5]
arr2:
 [1 0 0 0 5]
arr3:
 [[ 1  2 20]
 [ 4  5 50]
 [ 7  8 80]]

布爾索引賦值

?? 通過布爾掩碼選擇符合條件的元素,批量修改。

code:
import numpy as np
arr1 = np.array([1, 2, 6, 4, 10, 5, 8])
arr1[(arr1 > 3) & (arr1 < 8) ] = 0
print("arr1:\n", arr1)
result:
arr1:
 [ 1  2  0  0 10  0  8]

使用 np.put() 按索引批量賦值

-?? np.put(arr, [索引],[對應索引的修改值])

code:
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
np.put(arr, [0, 2, 4], [100, 300, 500])  # 修改索引0、2、4的元素
print(arr)
result:
[100  20 300  40 500]

使用 np.where() 條件替換

-?? np.where(condition),返回滿足條件的元素的索引。

code:
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6])
indices = np.where(arr1 > 3)
print("indices:\n", indices)
print("arr1[indices]:\n", arr1[indices])
# np.where對于二維數組, 返回的是行索引和列索引列表, 滿足條件的是2, 3,4這兩個元素, 即為
# arr2[0,1], arr2[1,0], arr2[1,1],它們行索引形成[0,1,1], 列索引形成[1,0,1]
arr2 = np.array([[1, 2], [3, 4]])
row_idx, col_idx = np.where(arr2 > 1)
print(f"row_idx:{row_idx}, col_idx: {col_idx}")
result:
indices:
 (array([3, 4, 5], dtype=int64),)
arr1[indices]:
 [4 5 6]
row_idx:[0 1 1], col_idx: [1 0 1]
  • -?? np.where(condition, x, y),當 condition 為 True 時,取 x 的值,否則取y的值。
  • -?? 算是3目運算符。
code:
import numpy as np
dt = np.dtype([
    ('name', 'U3'),  # Unicode字符串,最大長度3
    ('age', np.int32),
    ('height', float)
])
arr = np.array([
    ('Alice', 25, 1.65),
    ('Bob', 30, 1.80),
    ('Charlie', 22, 1.75)
], dtype=dt)
print(arr)
print(arr[0]["name"])
print(arr["age"])
result:
[('Ali', 25, 1.65) ('Bob', 30, 1.8 ) ('Cha', 22, 1.75)]
Ali
[25 30 22]

修改為特殊值

  • ??? 如果要賦值為nan,必須dtarray為float型,先要進行數據類型的轉換。

numpy中的裁剪函數Clip

  • ??Clip函數用于將數組中的元素限制在指定的最小值和最大值之間。
  • ?? np.clip(arr, a_min, a_max, out=None), arr:輸入的數組。a_min:最小值(低于此值的元素將被替換為 a_min, a_max:最大值(高于此值的元素將被替換為 a_max)。
  • out(可選):指定輸出結果的數組,如果指定為arr,相當于原地修改,若不提供則返回新數組。
code:
import numpy as np
arr2d = np.array([[1, 5], [10, 15]])
clipped = np.clip(arr2d, 3, 12, out=arr2d)
print(clipped)
print(arr2d)
result:
[[ 3  5]
 [10 12]]
[[ 3  5]
 [10 12]]

到此這篇關于Python numpy數組元素的訪問及數組的增刪改查的文章就介紹到這了,更多相關Python numpy數組元素增刪改查內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python光學仿真學習處理高斯光束分布圖像

    Python光學仿真學習處理高斯光束分布圖像

    這篇文章主要為大家介紹了Python光學仿真學習之如何處理高斯光束的分布圖像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 詳解在Anaconda環(huán)境下Python安裝pydot與graphviz的方法

    詳解在Anaconda環(huán)境下Python安裝pydot與graphviz的方法

    這篇文章主要為大家詳細介紹了在Anaconda環(huán)境中,安裝Python語言pydot與graphviz兩個模塊的方法,文中的安裝方法講解詳細,感興趣?的可以了解一下
    2023-02-02
  • python類繼承用法實例分析

    python類繼承用法實例分析

    這篇文章主要介紹了python類繼承用法實例分析,以實例的形式詳細講述了Python類繼承的實現方法及相關的工作原理,非常實用,需要的朋友可以參考下
    2014-10-10
  • Pandas中運行速度優(yōu)化的常用方法介紹

    Pandas中運行速度優(yōu)化的常用方法介紹

    這篇文章主要為大家詳細介紹了幾種pandas中常用到的方法,對于這些方法使用存在哪些需要注意的問題,以及如何對它們進行速度提升,需要的小伙伴可以參考下
    2025-03-03
  • python基礎之while循環(huán)語句的使用

    python基礎之while循環(huán)語句的使用

    這篇文章主要介紹了python基礎之while循環(huán)語句的使用,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-04-04
  • Python切換pip安裝源的方法詳解

    Python切換pip安裝源的方法詳解

    眾所周知pip是Python中非常方便易用的安裝包管理器,但是在實際安裝中,卻是非常的慢,該如何解決呢?那么下面這篇文章就給大家介紹了Python切換pip安裝源的方法,文中介紹的很詳細,對大家學習或者理解具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-11-11
  • Python自定義簡單圖軸簡單實例

    Python自定義簡單圖軸簡單實例

    這篇文章主要介紹了Python自定義簡單圖軸簡單實例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python進階篇之多線程爬取網頁

    Python進階篇之多線程爬取網頁

    這篇文章主要為大家介紹了Python進階中利用多線程來爬取網頁的示例實現及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • Python實現的在特定目錄下導入模塊功能分析

    Python實現的在特定目錄下導入模塊功能分析

    這篇文章主要介紹了Python實現的在特定目錄下導入模塊功能,結合實例形式分析了Python基于系統(tǒng)函數及import語句實現模塊導入的相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • 詳解Python如何在Web環(huán)境中使用Matplotlib進行數據可視化

    詳解Python如何在Web環(huán)境中使用Matplotlib進行數據可視化

    數據可視化是數據科學和分析中一個至關重要的部分,它能幫助我們更好地理解和解釋數據,在現代應用中,越來越多的開發(fā)者希望能夠將數據可視化結果展示在網頁上,本文將介紹如何在 Web 環(huán)境中使用 Matplotlib 進行可視化,包括基本概念、集成方式以及實用示例
    2024-11-11

最新評論