我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文依然说的ndarray的不可能系列,就是代码的执行结果和大家脑补运行的结果,明显不一致的情况。共有两个可能有些烧脑的操作,见本文的两个主要章节内容。

苏南大叔:ndarray读写成员变量时,初始数据对后续数据的限制 - ndarray写成员变量
ndarray读写成员变量时,初始数据对后续数据的限制(图4-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程感悟。本文的主要研究对象,依然是ndarray。议题是对ndarray的成员进行设置。测试环境:win10python@3.11.0numpy@1.24.2pandas@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读写成员变量时,初始数据对后续数据的限制 - 长度限制
ndarray读写成员变量时,初始数据对后续数据的限制(图4-2)

失败的原因就是,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读写成员变量时,初始数据对后续数据的限制 - dtype
ndarray读写成员变量时,初始数据对后续数据的限制(图4-3)

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读写成员变量时,初始数据对后续数据的限制 - 左右类型不同不报错
ndarray读写成员变量时,初始数据对后续数据的限制(图4-4)

题外话

如果本文讨论的两个烧脑内容,把ndarray换成list的话,并不存在问题,可以期待后续内容。

结束语

ndarray了解的越多,那么可能会有更多的深刻认识哦。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python