Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累

ndarray对象实质上就可以理解为矩阵, 矩阵是咱们作运算的基本单位,所以其初始化、属性调整、属性获取、基本操作都是高频使用的。
虽然是高频使用的,但有时候,莫名地就忘了格式,或者忘了还有这个操作,所以有必要写一篇博文把”Numpy库的ndarray对象初始化、属性调整、属性获取、基本操作”的示例代码进行个积累汇总,以便自己Coding时取用。

目录

1 直接赋值初始化一个矩阵

示例代码如下:

A = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10],
              [11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25]], dtype='int8')

上面代码中的第二个参数dtype是可选的,不如不填,则系统根据矩阵元素的数据大小来确定。
上面的代码创建了一个二维矩阵,让我们来看一个创建三维矩阵的示例。

[En]

The above code creates a two-dimensional matrix, and let’s look at an example of creating a three-dimensional matrix.


import numpy as np

B = np.array([[[11, 12, 13, 14],
               [15, 16, 17, 18]],
              [[19, 20, 21, 22],
               [23, 24, 25, 26]],
              [[27, 28, 29, 30],
               [31, 32, 33, 34]]])

运行结果如下图所示:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
从其shape属性可以看出,B矩阵的尺寸为三通道,两行,四列。其内容如下:
Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累

2 通过复制别的矩阵得到新的矩阵

示例代码如下:

import numpy as np

B = np.array([[[11, 12, 13, 14],
               [15, 16, 17, 18]],
              [[19, 20, 21, 22],
               [23, 24, 25, 26]],
              [[27, 28, 29, 30],
               [31, 32, 33, 34]]])

C = B

运行结果如下所示:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累

3 创建和原矩阵大小一样、通道一样,但是数据类型和原矩阵不一样的全0矩阵

示例代码如下:

import numpy as np

B = np.array([[[11, 12, 13, 14],
               [15, 16, 17, 18]],
              [[19, 20, 21, 22],
               [23, 24, 25, 26]],
              [[27, 28, 29, 30],
               [31, 32, 33, 34]]])

C = B
C = 0*C
C = C.astype('float32')

运行结果如下:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
注意:在2中说了通过”=”赋值得到的新ndarray对象和原对象共享存储空间(浅拷贝),但由于这里使用了乘法运算符,所以会为结果构建一个新的ndarray对象,并为其分配新的存储空间,所以通过上面代码的一系列操作得到的是深拷贝。

4 创建指定大小和数据类型且元素值全为1或0的二维或多维矩阵

D = np.ones((3, 5), dtype='uint8')

注意,我们还可通过函数ones()、zeros()等函数创建多维矩阵,比如我们可以通过下面这条语句创建二通道、三行、四列的三维矩阵。

D = np.ones((2, 3, 4), dtype='uint8')

运行结果如下:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
从这个结果我们可以看出,第一个索引代表通道数(也称为页数),第二个索引代表行数,第三个索引代表列数。要特别注意,OpenCV的函数imread()读到的图像数据的三个索引值并不是这个顺序,详情见 https://www.hhai.cc/thread-89-1-1.html
类似地,四维矩阵可以按如下方式初始化:
[En]

Similarly, a four-dimensional matrix can be initialized as follows:

D = np.ones((2, 3, 4, 5), dtype='uint8')

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累

5 创建指定大小和数据类型且元素值全为0的矩阵

E = np.zeros((3, 5), dtype='float32')

6 创建指定大小、指定数据类型、数据值按均匀分布生成的整数矩阵

F = np.random.randint(0, 100, (3, 5), dtype='uint8')

7 创建指定大小、数据值按正态分布(均值为0,标准差为1)生成的矩阵

K = np.random.randn(2, 3)

注意:函数randn()不能设置数据类型,也不能设置正态分布的均值和标准差,其原型如下:

random.randn(d0, d1, ..., dn)

运行结果如下:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
从上图我们可以看出,其数据类型为float64

8 获取ndarray对象(矩阵)的维度、形状、元素个数、数据类型、每个元素占用的内存空间、内存布局、数据的实部、数据的虚部

示例代码如下:

import numpy as np

A = np.array([[[11, 12, 13, 14],
               [15, 16, 17, 18]],
              [[19, 20, 21, 22],
               [23, 24, 25, 26]],
              [[27, 28, 29, 30],
               [31, 32, 33, 34]]])

A_dim = A.ndim
A_shape = A.shape
A_size = A.size
A_dtype = A.dtype
A_itemsize = A.itemsize
A_flags = A.flags
A_real = A.real
A_imag = A.imag

运行结果如下图所示:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累

9 对矩阵元素的选取和访问(切片操作)

有关数据选择和访问,请参阅我的另一篇博客文章,链接:

[En]

For data selection and access, please refer to my other blog post, link:

https://www.hhai.cc/thread-122-1-1.html

10 提取矩阵(图像)中的感兴趣区域、以及矩阵(图像)的深拷贝和浅拷贝问题

关于这个问题,请参阅我的另一篇博客文章,链接如下:

[En]

For this question, see my other blog post, the link is as follows:

https://www.hhai.cc/thread-128-1-1.html

11 ndarray对象转换为列表

关于ndarray对象如何转换为列表,大家可以参考我的另一篇博文,链接如下:
https://www.hhai.cc/thread-123-1-1.html

Original: https://blog.csdn.net/wenhao_ir/article/details/124416798
Author: 昊虹AI笔记
Title: Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累



相关阅读

Title: TypeError: ‘float‘ object is not subscriptable 已解决

其实就是个小问题,但是爆出来的时候也很莫名其妙。因为之前都跑得好好的,只是换了不同的文件去跑才出的问题,关键是不同的文件要处理的内容和格式都是完全一样的,一个顺利跑完,一个就报TypeError: ‘float’ object is not subscriptable这个错,就非常无语。接下来就是看看怎么解决问题了:

一开始自然是直接搜索问题,寻找解决办法,实话实说,看了一些博客,但是并没有直接找到解决办法,但是从中获得了一些想法,对问题理解更清楚一点。下面是找到的一种解释:

Python的Numpy库的ndarray对象(矩阵)初始化、属性调整、属性获取、基本操作示例代码积累
然后说一下我的具体应用:
我需要从预测生成的 json文件获取预测分数score和预测位置(坐标值)把它们写入txt文档:
ff = open('xx.txt','w')
for anno in annos:
    score = anno['score']
    left,top,right,bottom = anno['box']
    ff.write("%s %s %s %s %s\n" %(score[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))
ff.close()

json文件内容格式:

{
    "annos":[
        {
            "score":0.999976544,
            "box":[
                145.436234753274657
                456.312645236453657
                254.327564356457435
                553.957943578765678
                ]
        },
        {
            "score":0.9996542376,
            "box":[
                344.436234753274657
                987.312645236453657
                423.327564356457435
                234.957943578765678
                ]
        },
        ...
    ]
}

具体问题是在执行写入的时候出现的:

ff.write("%s %s %s %s %s\n" %(score[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))

一开始我的关注点是放在box的内容读取上,他是四个浮点数位于一个列表下,而且搜到的方法也和列表内容相关

后面通过我的控制变量试验后发现这里是没问题的,所以问题就是score[:6]的写入报了错

我的解决办法是:

"""先把读取到的score转化为字符,再进行写入"""
xx = str(anno['score'])
ff.write("%s %s %s %s %s\n" %(xx[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))

如上就可以顺利执行了,没报TypeError: ‘float’ object is not subscriptable

原先想过,直接把str加在最后一句上,即:

ff.write("%s %s %s %s %s\n" %(str(score[:6]), str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))

发现还是会报错,也就是说直接写的时候读的不能是浮点型数据( 可能是此处直接从annos的列表中读取出来的浮点数据不能直接处理),即使经过中间处理也不行,需要转化为字符型后再写入即可解决

其实这个问题 更像一个bug并不是一定会出现的问题,如果报错了,
就要花时间解决一下。

Original: https://blog.csdn.net/qq_44442727/article/details/126479409
Author: 清梦枕星河~
Title: TypeError: ‘float‘ object is not subscriptable 已解决

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/318946/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总