关键词:
【中文标题】将 numpy 数组转换为 CSV 字符串,将 CSV 字符串转换回 numpy 数组【英文标题】:Convert a numpy array to a CSV string and a CSV string back to a numpy array 【发布时间】:2013-05-05 04:12:52 【问题描述】:我必须将一个 numpy 浮点数组转换为一个字符串(以存储在 SQL DB 中),然后还将相同的字符串转换回一个 numpy 浮点数组。
这就是我要去字符串的方式 (based on this article)
VIstring = ''.join(['%.5f,' % num for num in VI])
VIstring= VIstring[:-1] #Get rid of the last comma
所以首先这确实有效,这是一个好方法吗?他们是摆脱最后一个逗号的更好方法吗?或者我可以使用join
方法为我插入逗号吗?
其次,更重要的是,有没有一种巧妙的方法可以从字符串返回到浮点数组?
这里是数组和字符串的例子:
VI
array([ 17.95024446, 17.51670904, 17.08894626, 16.66695611,
16.25073861, 15.84029374, 15.4356215 , 15.0367219 ,
14.64359494, 14.25624062, 13.87465893, 13.49884988,
13.12881346, 12.76454968, 12.40605854, 12.00293814,
11.96379322, 11.96272486, 11.96142533, 11.96010489,
11.95881595, 12.26924591, 12.67548634, 13.08158864,
13.4877041 , 13.87701221, 14.40238245, 14.94943786,
15.49364166, 16.03681428, 16.5498035 , 16.78362298,
16.90331119, 17.02299387, 17.12193689, 17.09448654,
17.00066063, 16.9300633 , 16.97229868, 17.2169709 , 17.75368411])
VIstring
'17.95024,17.51671,17.08895,16.66696,16.25074,15.84029,15.43562,15.03672,14.64359,14.25624,13.87466,13.49885,13.12881,12.76455,12.40606,12.00294,11.96379,11.96272,11.96143,11.96010,11.95882,12.26925,12.67549,13.08159,13.48770,13.87701,14.40238,14.94944,15.49364,16.03681,16.54980,16.78362,16.90331,17.02299,17.12194,17.09449,17.00066,16.93006,16.97230,17.21697,17.75368'
哦,是的,%.5f
的精度损失完全没问题,这些值由原始点插值,只有小数点后 4 位精度,所以我不需要打败它。所以在恢复 numpy 数组时,我很高兴只得到 5 位小数精度(显然我想)
【问题讨论】:
您可以查看 numpy savetxt 和 loadtxt 函数 @MattAnderson 有没有办法使用这些方法将文本直接放入字符串中,然后直接从内存中的字符串中加载而不是使用文件? 【参考方案1】:>>> import numpy as np
>>> from cStringIO import StringIO
>>> VI = np.array([ 17.95024446, 17.51670904, 17.08894626, 16.66695611,
16.25073861, 15.84029374, 15.4356215 , 15.0367219 ,
14.64359494, 14.25624062, 13.87465893, 13.49884988,
13.12881346, 12.76454968, 12.40605854, 12.00293814,
11.96379322, 11.96272486, 11.96142533, 11.96010489,
11.95881595, 12.26924591, 12.67548634, 13.08158864,
13.4877041 , 13.87701221, 14.40238245, 14.94943786,
15.49364166, 16.03681428, 16.5498035 , 16.78362298,
16.90331119, 17.02299387, 17.12193689, 17.09448654,
17.00066063, 16.9300633 , 16.97229868, 17.2169709 , 17.75368411])
>>> s = StringIO()
>>> np.savetxt(s, VI, fmt='%.5f', newline=",")
>>> s.getvalue()
'17.95024,17.51671,17.08895,16.66696,16.25074,15.84029,15.43562,15.03672,14.64359,14.25624,13.87466,13.49885,13.12881,12.76455,12.40606,12.00294,11.96379,11.96272,11.96143,11.96010,11.95882,12.26925,12.67549,13.08159,13.48770,13.87701,14.40238,14.94944,15.49364,16.03681,16.54980,16.78362,16.90331,17.02299,17.12194,17.09449,17.00066,16.93006,16.97230,17.21697,17.75368,'
>>> np.fromstring(s.getvalue(), sep=',')
array([ 17.95024, 17.51671, 17.08895, 16.66696, 16.25074, 15.84029,
15.43562, 15.03672, 14.64359, 14.25624, 13.87466, 13.49885,
13.12881, 12.76455, 12.40606, 12.00294, 11.96379, 11.96272,
11.96143, 11.9601 , 11.95882, 12.26925, 12.67549, 13.08159,
13.4877 , 13.87701, 14.40238, 14.94944, 15.49364, 16.03681,
16.5498 , 16.78362, 16.90331, 17.02299, 17.12194, 17.09449,
17.00066, 16.93006, 16.9723 , 17.21697, 17.75368])
【讨论】:
啊,将字符串设置为文件缓冲区...要走的路。知道那里应该有一些聪明的方法 这与我发布的链接中的方法 5 非常相似,我想我应该已经注意到了。谢谢。我可能会坚持 Boud 的方法 @Dan 不是真的,因为我的代码中的所有操作都是在C
级别执行的,所以它可能会更快,而且它还避免了使用 numpy
函数重新发明***。跨度>
【参考方案2】:
如果你想要一些字符串表示(不一定是 CSV),你可以试试这个,我一直在使用:
import numpy, json
## arr is some numpy.ndarray
s = json.dumps(arr.tolist())
arrback = numpy.array(json.loads(s))
它适用于大多数常见的数据类型。
【讨论】:
+1 这很酷,特别是如果您需要保持精度。【参考方案3】:首先你应该这样使用join
来避免最后一个逗号问题:
VIstring = ','.join(['%.5f' % num for num in VI])
然后读取它,使用numpy.fromstring
:
np.fromstring(VIstring, sep=',')
【讨论】:
非常好的功能建议@Boud. 不客气@Pramit:pandas 足够强大,它会让用户忘记底层的 numpy 功能将列表列表的字符串转换为 Numpy 数组
】将列表列表的字符串转换为Numpy数组【英文标题】:ConvertingastringoflistsoflistsintoaNumpyarray【发布时间】:2019-03-2418:51:50【问题描述】:我对Pandas和Numpy还是很陌生。我正在尝试将包含列表列表的字符串转换为形状数组(150、150、3... 查看详情
numpy 将分类字符串数组转换为整数数组
】numpy将分类字符串数组转换为整数数组【英文标题】:numpyconvertcategoricalstringarraystoanintegerarray【发布时间】:2011-03-1111:50:04【问题描述】:我正在尝试将分类变量的字符串数组转换为分类变量的整数数组。例如importnumpyasnpa=np.ar... 查看详情
为啥将 numpy 数组转换为 csv 文件不显示属性名称,而是将第一行值作为属性名称?
】为啥将numpy数组转换为csv文件不显示属性名称,而是将第一行值作为属性名称?【英文标题】:whyconvertingnumpyarrayintocsvfileshownoattributesnamebutratherputthefirstrowvaluesastheattributenames?为什么将numpy数组转换为csv文件不显示属性名称,而... 查看详情
如何将csv文件转换为numpy数组格式?(代码片段)
...s[0][2]之类的元素。我想知道如何将csv文件转换为一个numpy数组?答案如果您坚持将数据帧转换为numpy数组,则可以使用iris.to_numpy()来获得所需的内容,因为熊猫是建立在numpy之上的,并且它们紧密集成。但是,正如我在评论中... 查看详情
将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数
】将CSV文件读取到numpy数组,第一行为字符串,其余为浮点数【英文标题】:ReadCSVfiletonumpyarray,firstrowasstrings,restasfloat【发布时间】:2012-09-0209:46:41【问题描述】:我将数据存储在CSV中,其中第一行是字符串(列名),其余行是... 查看详情
将 ctypes 类型数组转换为 void 指针时出现 Numpy 错误
...ointer【发布时间】:2020-01-2218:53:09【问题描述】:我想将字符串列表发送到C函数:fromctypesimportc_double,c_void_p,Structure,cast,c_char_p,c_size_t,POINTERimport 查看详情
如何将 .csv 文件中的数据转换为 NumPy 数组并使用统计数据来查找数据的平均值? [复制]
】如何将.csv文件中的数据转换为NumPy数组并使用统计数据来查找数据的平均值?[复制]【英文标题】:HowdoIconvertdatafrom.csvfileintoaNumPyarrayandusestatisticstofindthemeanofthedata?[duplicate]【发布时间】:2019-09-1106:08:47【问题描述】:我想将.cs... 查看详情
将字符串转换为numpy数组
】将字符串转换为numpy数组【英文标题】:Convertstringtonumpyarray【发布时间】:2015-03-2806:24:57【问题描述】:输入:mystr="100110"所需的输出numpy数组:mynumpy==np.array([1,0,0,1,1,0])我试过了:np.fromstring(mystr,dtype=int,sep=\'\')但问题是我无法... 查看详情
将浮点 numpy 数组转换为字符串数组 Python
】将浮点numpy数组转换为字符串数组Python【英文标题】:ConvertingfloatnumpyarraystostringarraysPython【发布时间】:2021-12-2805:50:35【问题描述】:如何将所有浮点numpy数组转换为字符串数组?importnumpyasnpfloats=np.array([1,3.4,0.678,11.1])预期输... 查看详情
将熊猫系列转换为numpy数组[重复]
】将熊猫系列转换为numpy数组[重复]【英文标题】:Convertpandasseriesintonumpyarray[duplicate]【发布时间】:2017-10-2913:04:27【问题描述】:我是pandas和python的新手。我的输入数据是这样的categorytext1helloiamfine.howareyou1iamgood.howareyoudoing.inputDa... 查看详情
将 C/C++ 向量快速转换为 Numpy 数组
】将C/C++向量快速转换为Numpy数组【英文标题】:FastconversionofC/C++vectortoNumpyarray【发布时间】:2011-03-2419:13:38【问题描述】:我正在使用SWIG将一些C++代码粘合到Python(2.6)中,其中一部分粘合包括一段代码,用于将C++端的大数据字... 查看详情
C# 如何将 CSV 转换为数组?
...布时间】:2017-10-0208:11:01【问题描述】:我有一个玩家ID字符串的CSV列表,每个字符串位于不同的行。如何在C#中将每个ID存储在数组中?【问题讨论】:努力寻找你的问题你做了什么?StackOverflow不是免费的代码编写服务。您应... 查看详情
将数据从csv转换为numpy数组时出错(代码片段)
我正在从CSV文件创建一个Numpy数组,它确实有效,但在for循环结束时它给出了上述错误。我有一个5列的数据集,并一直在尝试创建一个Numpy数组。但是,一旦我将代码更改为:代码确实只与文件列一起使用:values=[float(x)forxinline.s... 查看详情
Numpy:将标签转换为索引
...间】:2018-10-1206:28:09【问题描述】:是否可以使用numpy将字符串向量转换为索引向量?假设我有一个字符串数组,如[\'ABC\',\'DEF\',\'GHI\',\'DEF\',\'ABC\']等。我希望将其更改为整数数组,如[0,1,2,1,0]。可以使用numpy吗?我知道Pandas有一... 查看详情
将numpy数组转换为字符串的最有效方法
】将numpy数组转换为字符串的最有效方法【英文标题】:Mostefficientwaytoconvertnumpyarraytostring【发布时间】:2015-02-1018:26:13【问题描述】:我正在运行一些运行速度太慢的模拟,因此我分析了我的代码,发现超过90%的时间都花在了将... 查看详情
如何将 numpy 对象数组转换为 str/unicode 数组?
...有方法现在都可以例外。原问题:有时使用objectdtype存储字符串数组很方便,尤其是当需要在不知道字符串最大长度的情况下修 查看详情
将 1 和 0 的 numpy 数组转换为十进制(Python)
...切都好。我现在正在做一个小任务。我有一个二进制数的字符串,我需要将其转换为十进制。我将字符串转换为numpy数组,然后尝试在此链接的答案中看到的内容:Convertbinary(0|1)nu 查看详情
如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?
】如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?【英文标题】:Howtoconvertvectorwrappedasstringtonumpyarrayinpandasdataframe?【发布时间】:2018-01-2402:11:43【问题描述】:我有一个带有一列向量的pandas数据框,我想对其执行矩... 查看详情