ndarray读写成员变量时,如何通过[]或者[:]定位成员?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文基于python
,讨论的是读写ndarray
成员时的方法,以及可能的误会产生的错误用法。涉及的是[数字]
和[数字:数字]
这两种成员变量读法。这里因为思维的习惯定式,就会产生使用的误区,特别是[:]
这种用法,会和惯性思维产生很大的碰撞。
大家好,这里是苏南大叔的“程序如此灵动”博客。本文描述如何通过[]
定位到ndarray
成员。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。
本文的代码或者结论,把ndarray
换成list
一样成立。
定位成员方式误区
作为基础类型的list
类型,和ndarray
这种高级拓展类型,有着千丝万缕的联系,两者之间可以做到相互转换。参考文章:
那么,list
和ndarray
也都可以使用传统的[]
来定位成员,也可以使用[:]
这种方式。
- 比如读写二维数组的时候,就是通过
[][]
进行定位的(写了两个[]
),这个是常识。 - 改成
[:]
的时候,就也是通过[:][:]
进行定位的,(注意是两个[:]
)
上面推导出来的第二条结论是错误的,[:]
得到的维度比[]
多一层。如果使用了[:]
,那么很可能需要很多个[]
或者[:]
的组合来定位到同样的位置了。
传统的[]定位成员
这个定位就很简单了,简单明了。测试代码:
import numpy as np
s1 = np.array([["苏", "南", "大", "叔"], ["北", "京", "大", "学"], ["技", "术", "经", "理"]])
# s1 = [["苏", "南", "大", "叔"], ["北", "京", "大", "学"], ["技", "术", "经", "理"]]
print(s1[0]) # ['苏' '南' '大' '叔']
print(s1[0][0]) # 苏
print(s1[1]) # ['北' '京' '大' '学']
print(s1[1][1]) # 京
print(s1[0,0]) # 苏
print(s1[1,1]) # 京
s1 = np.arange(27).reshape(-1,3,3)
print(s1.shape)
print(s1[0,0,0]) # 0
print(s1[1,2,1]) # 16
使用[:]定位成员
因为误区在[:]
,所以这里定义了一个二维数组,然后一步步定位到某个成员。仔细想下面的结论:
原版是个二维数组的话,[:]
还是个二维数组,[:][:]
还是个二维数组,[:][:][:]
还是个二维数组...
import numpy as np
s1 = np.array([["苏", "南", "大", "叔"], ["北", "京", "大", "学"], ["技", "术", "经", "理"]])
# s1 = [["苏", "南", "大", "叔"], ["北", "京", "大", "学"], ["技", "术", "经", "理"]]
print(s1[0:2]) # [['苏' '南' '大' '叔'] ['北' '京' '大' '学']]
print(s1[0:2][4]) # ['北' '京' '大' '学']
print(s1[0:2][1:2]) # [['北' '京' '大' '学']]
print(s1[0:2][1:2][0]) # ['北' '京' '大' '学']
print(s1[0:2][1:2][0][1]) # 京
s1[0:2][1:2]
,[1:2]
是在[0:2]
里面再次挑选。
再解释一次
[:]
操作,一直保持原维度不变,并且有容错性,超限不报错。[]
操作,会降低到下一个维度,维度减一,超出索引值报错。
测试代码:
import numpy as np
s1 = np.array([["苏", "南", "大", "叔"], ["北", "京", "大", "学"], ["技", "术", "经", "理"]])
print(s1[0:2][8:9]) # 不报错,返回[]
print(s1[0:2][1:2][9]) # 报错
输出:
[]
Traceback (most recent call last):
File "C:\Users\sunan\Desktop\demo\py\t.py", line 4, in <module>
print(s1[0:2][1:2][9]) # 报错
IndexError: index 9 is out of bounds for axis 0 with size 1
写作初衷
写本文的原因呢,也是看网上一位大牛的文章,然后觉得写的挺有道理的,然后亲自试了一下,好像不是那么回事。当然了,如果这位大牛认为我的文章有问题,也可以指出来,相互学习嘛。
这位大牛的文章链接是:
看这位"昊虹君"大牛的网站上文章也蛮多的,都是一些高科技的文章,而且还有引流变现的途径,在某些方面是值得学习的。
结束语
python
是一条大蟒蛇,掌握它的习性需要付出不断的尝试和努力。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。