百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

使用numpy创建字符串矩阵时发现的一些问题

ztj100 2024-11-10 13:14 16 浏览 0 评论

今天我打算用numpy直接创建一个字符串矩阵是发现了一些问题在这里记录下

首先我打算创建一个3*3的字符串矩阵,大致代码如下:

import numpy as np

data = np.ones([3, 3], dtype=np.str)
data[:] = '01234567890123456789012345678901234567890123456789'
print("直接使用dtype")
print(data)

发现字符串只取了第一个字符,莫名奇妙。然后我将代码改为如下:

import numpy as np

data = np.ones([3, 3]).astype(str)
data[:] = '01234567890123456789012345678901234567890123456789'
print("使用astype")
print(data)

发现也仅取了前32个字符串,效果也不理想。此时我怀疑字符串长度和数据类型所占字节长度有关,因此编写了下面的代码试验

import numpy as np

data = np.ones([3, 3]).astype(np.int32).astype(str)
data[:] = '01234567890123456789012345678901234567890123456789'
print("使用astype int32")
print(data)
data = np.ones([3, 3]).astype(np.int64).astype(str)
data[:] = '01234567890123456789012345678901234567890123456789'
print("使用astype int64")
print(data)

int32字符串长度为11,int64字符串长度为64

于是我马上找到NumPy 数据类型测试

其中占字节数最大的数据格式为complex128,于是我又将代码改了改

import numpy as np

d = ''
for _ in range(10000):
    d += "1"
data = np.ones([3, 3], dtype=np.str).astype(np.complex128).astype(str)
data[:] = d
print("直接使用dtype")
print(len(data[0, 0]))
print("*" * 30)

complex128数据类型也不够用啊,理论上哪怕初始化的数据所占字节再大,如果不动态存储字符串也会有问题的。那如果直接使用list转为numpy呢?

首先创建一个长度为100001的字符串,然后存入一个3*3的list中,最后将这个list转为numpy数据格式

import numpy as np

d = ''
for _ in range(100001):
    d += "1"
data=[]
for _ in range(3):
    t = []
    for _ in range(3):
        t.append(d)
    data.append(t)
print("使用list转换")
data = np.asarray(data)
print(len(data[0, 0]))
print("*" * 30)

此时效果如预期,并没有因为类型转为而丢失string的数据。但这并不是我所想要的,我就是想创建一个能存储string对象的矩阵。于是用搜索引擎搜索一番后终于找到了结果,只需要在创建的时候设置dtype=object即可

import numpy as np

d = ''
for _ in range(100001):
    d += "1"

data = np.ones([3, 3], dtype=object)
data[:] = d
print("使用object")
print(len(data[0, 0]))
print("*" * 30)

相关推荐

再说圆的面积-蒙特卡洛(蒙特卡洛方法求圆周率的matlab程序)

在微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积,本文使用蒙特卡洛方法求解圆面积。...

python编程:如何使用python代码绘制出哪些常见的机器学习图像?

专栏推荐...

python创建分类器小结(pytorch分类数据集创建)

简介:分类是指利用数据的特性将其分成若干类型的过程。监督学习分类器就是用带标记的训练数据建立一个模型,然后对未知数据进行分类。...

matplotlib——绘制散点图(matplotlib散点图颜色和图例)

绘制散点图不同条件(维度)之间的内在关联关系观察数据的离散聚合程度...

python实现实时绘制数据(python如何绘制)

方法一importmatplotlib.pyplotaspltimportnumpyasnpimporttimefrommathimport*plt.ion()#...

简单学Python——matplotlib库3——绘制散点图

前面我们学习了用matplotlib绘制折线图,今天我们学习绘制散点图。其实简单的散点图与折线图的语法基本相同,只是作图函数由plot()变成了scatter()。下面就绘制一个散点图:import...

数据分析-相关性分析可视化(相关性分析数据处理)

前面介绍了相关性分析的原理、流程和常用的皮尔逊相关系数和斯皮尔曼相关系数,具体可以参考...

免费Python机器学习课程一:线性回归算法

学习线性回归的概念并从头开始在python中开发完整的线性回归算法最基本的机器学习算法必须是具有单个变量的线性回归算法。如今,可用的高级机器学习算法,库和技术如此之多,以至于线性回归似乎并不重要。但是...

用Python进行机器学习(2)之逻辑回归

前面介绍了线性回归,本次介绍的是逻辑回归。逻辑回归虽然名字里面带有“回归”两个字,但是它是一种分类算法,通常用于解决二分类问题,比如某个邮件是否是广告邮件,比如某个评价是否为正向的评价。逻辑回归也可以...

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂

一、拟合和回归的区别拟合...

推荐2个十分好用的pandas数据探索分析神器

作者:俊欣来源:关于数据分析与可视化...

向量数据库:解锁大模型记忆的关键!选型指南+实战案例全解析

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

用Python进行机器学习(11)-主成分分析PCA

我们在机器学习中有时候需要处理很多个参数,但是这些参数有时候彼此之间是有着各种关系的,这个时候我们就会想:是否可以找到一种方式来降低参数的个数呢?这就是今天我们要介绍的主成分分析,英文是Princip...

神经网络基础深度解析:从感知机到反向传播

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

Python实现基于机器学习的RFM模型

CDA数据分析师出品作者:CDALevelⅠ持证人岗位:数据分析师行业:大数据...

取消回复欢迎 发表评论: