一、環境:
numpy 1.16.4
python 3.7
二、描述:
import numpy as np
a = np.mat([[1]])
print(type(a))
print("a:",a)
print("a[0][0]:",a[0][0])
輸出:
可以看出,直接的索引無法對numpy.matrixl目標進行索引
如果是numpy.ndarray類型,則可以進行索引
import numpy as np
a = np.array([[1.]])
print(type(a))
print("a:",a)
print("a[0][0]:",a[0][0])
個人原因分析:matrixl 類型時 [[1]] 是一個 (1,1) 矩陣的對象 ,直接進行索引[0][0] 實質上是索引的 矩陣的對象,所以結果不變
在 array 時 則 索引的 數組內的 元素
三、解決:
import numpy as np
a = np.mat([[1.]])
print(type(a))
print("a:",a)
print("a[0][0]:",a[0][0])
print("item方法:",a.item(0,0))
四、item方法詳解(數組和矩陣都可使用此方法):
a.item (* args)
將數組中的元素複製到標準Python標量並返回它。
參數(變量號和類型)
- none:在這種情況下,該方法只對數組有效
只有一個元素(’ a。size == 1 '),是哪個元素
複製到標準Python標量對象並返回。 - int_type:這個參數被解釋爲一個平面索引
數組,指定複製和返回哪個元素。 - int_types的元組:與單個int_type參數相同的函數,
參數被解釋爲一個nd索引
數組中。
返回值:
- z:標準Python標量對象
數組中指定元素的一個副本
Python標量
當’ a '的數據類型是longdouble或clongdouble時,item()返回一個標量數組對象,因爲沒有可用的Python標量,不會丟失信息。Void數組爲item()返回一個緩衝區對象,除非定義了字段,否則將返回一個tuple。
’ item '與[args]非常相似,不同的是,它不是一個數組標量,返回一個標準的Python標量。這對於加速是很有用的訪問數組的元素並對元素執行運算,使用Python的優化數學數組。
例子:
>>> np.random.seed(123)
>>> x = np.random.randint(9, size=(3, 3))
>>> x
array([[2, 2, 6],
[1, 3, 6],
[1, 0, 1]])
>>> x.item(3)
1
>>> x.item(7)
0
>>> x.item((0, 1))
2
>>> x.item((2, 2))
1
最後感謝陶老師的指點!