ndarray读写成员变量时,初始数据对后续数据的限制
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文依然说的ndarray
的不可能系列,就是代码的执行结果和大家脑补运行的结果,明显不一致的情况。共有两个可能有些烧脑的操作,见本文的两个主要章节内容。
大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程感悟。本文的主要研究对象,依然是ndarray
。议题是对ndarray
的成员进行设置。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。
如何定位到某个成员
可以通过[][]
或者[,]
或者[:][][]
等方式进行定位,参考文章:
ndarray 初始内容决定容量
ndarray
有个dtype
属性,虽然大多数时候都是自动生成的。但是,它可以看出每个成员的字符容量。如果对比到mysql
里面的话,就是varchar(255)
里面的255
。
需求场景描述:三个不同ndarray
,区别是:某个统一的位置的成员值不一致。现在需要将这个问题修复成统一的值。然而,修复失败!
测试代码:
import numpy as np
s1 = np.array([["苏", "南"], ["大", "叔"]])
s2 = np.array([["苏", "南"], ["大", "叔叔"]])
s3 = np.array([["苏", "南"], ["大", "叔叔叔"]])
s1[0, 0] = "酷酷酷"
s2[0, 0] = "酷酷酷"
s3[0, 0] = "酷酷酷"
print(s1)
print(s2)
print(s3)
输出:
[['酷' '南']
['大' '叔']]
[['酷酷' '南']
['大' '叔叔']]
[['酷酷酷' '南']
['大' '叔叔叔']]
失败的原因就是,ndarray
的初始值(们)决定了值的容量。
import numpy as np
s1 = np.array([["苏", "南"], ["大", "叔"]])
s2 = np.array([["苏", "南"], ["大", "叔叔"]])
s3 = np.array([["苏", "南"], ["大", "叔叔叔"]])
print(s1.dtype.name)
print(s2.dtype.name)
print(s3.dtype.name)
输出:
str32
str64
str96
ndarray 统一设置某值
等号左边是个array
,右边是个string
或者int
的话,这个按理说会报错,对不?然而对于ndarray
来说,并不会报错。而且会把左边array
里面的值全部设置为右边的值。
测试代码:
import numpy as np
s1 = np.array([["苏", "南", "大", "叔"], ["北", "京", "大", "学"], ["技", "术", "经", "理"]])
s1[0:2] = "豪" # 第一行,第二行
s1[2] = "好" # 第三行
s1[1:2][0][1] = "号" # 第二行里面的第二个位置
print(s1)
输出:
[['豪' '豪' '豪' '豪']
['豪' '号' '豪' '豪']
['好' '好' '好' '好']]
题外话
如果本文讨论的两个烧脑内容,把ndarray
换成list
的话,并不存在问题,可以期待后续内容。
结束语
ndarray
了解的越多,那么可能会有更多的深刻认识哦。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。