一、环境:
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
最后感谢陶老师的指点!