浅谈Python numpy创建空数组的问题

一、问题描述:

有一个shape为(308, 2)的二维数组,以及单独的一个数字,需要保存到csv文件中,这个单独的数字让其保存到第3列第一行的位置。

二、具体的实现:

首先要想把一个(308, 2)的二维数组和一个数字给拼接起来,直接拼接没办法实现,因为行数和列数都不同的两个ndarry是无法拼接的(此处按照目前我学的理解,是无法直接拼接的,如果可以的话,麻烦评论一下)。

然后我首先想到的解决方法就是先建一个(308,1)的二维数组,然后令这个二维数组的第一个元素设置成那个数字,然后进行拼接,保存。

为使数据可以显示完全,以仅以3行数据为例:

>>> a = np.ones((3,2))
>>> b = 0.2
>>> _b = np.empty((3,1))
>>> _b[0, 0] = b
>>> c = np.c_[a, _b]
>>> print(c)
[[1.00000000e+000 1.00000000e+000 2.00000000e-001]
 [1.00000000e+000 1.00000000e+000 2.12199579e-313]
 [1.00000000e+000 1.00000000e+000 2.54639495e-313]]
>>>

但是这样,我把结果保存到文件时,第3列的除第一行,其他的行是有数据的,我不想让它显示数据。
也就是empty这个函数只是创建一个未初始化的数组,实际上里面的数值都是垃圾值。

那么如何去实现视觉上没有数据呢,其实利用空的字符串就可以了

所以就通过np.ones设置dtype为str,此时生成的是元素都为空字符串的数组,(具体的原因还不清楚),然后此时若直接设置第一行的元素为某个值,是不行的,会自动变为'0‘,只有在拼接之后,然后再给它赋值才可以,这个地方我不是很理解,但是结果是正确的。

三、完整代码:

y_true = np.ones((3, 1), dtype=np.int)
y_pred = np.ones((3, 1), dtype=np.int)
y = np.c_[y_true, y_pred]

accuracy = np.zeros(shape=(y_true.shape[0], 1), dtype=np.str)

# 此时若设置accuracy[0, 0] = '0.89',最终accuracy[0, 0]存的是'0',具体原因还不清楚

res = np.c_[y, accuracy]  # 先拼接起来
res[0, 2] = '0.89'  # 然后再设置就可以了

res = pd.DataFrame(res, columns=['y_true', 'y_pred', 'accuracy'])
res.to_csv('1.csv')  # 保存到文件中

从文件中读取的时候,直接读出来,空白的地方被赋值为nan

a = pd.read_csv('1.csv', usecols=(1, 2, 3))
a = a.values
print(a, type(a), a.dtype)

关于np.nan需要注意的地方如下:

  • np.nan不是空对象。
  • 对列表中的nan进行操作时不能用"==np.nan"来判断。只能用np.isnan()来操作。
  • np.nan的数据类型是float。
import numpy as np

np.nan == np.nan
Out[3]: False

aa = np.array([1,2,3,np.nan,np.nan,4,5,np.nan])
aa
Out[5]: array([  1.,   2.,   3.,  nan,  nan,   4.,   5.,  nan])

aa[aa==np.nan] = 100  #错误方式
aa
Out[7]: array([  1.,   2.,   3.,  nan,  nan,   4.,   5.,  nan])

aa[np.isnan(aa)] = 100  #对nan操作的正确方式
aa
Out[9]: array([   1.,    2.,    3.,  100.,  100.,    4.,    5.,  100.])

type(np.nan)
Out[10]: float

关于参考:https://www.jb51.net/article/212249.htm

到此这篇关于浅谈Python numpy创建空数组的问题的文章就介绍到这了,更多相关numpy创建空数组内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • NumPy实现ndarray多维数组操作

    简介 NumPy一个非常重要的作用就是可以进行多维数组的操作,多维数组对象也叫做ndarray.我们可以在ndarray的基础上进行一系列复杂的数学运算. 本文将会介绍一些基本常见的ndarray操作,大家可以在数据分析中使用. 创建ndarray 创建ndarray有很多种方法,我们可以使用np.random来随机生成数据: import numpy as np # Generate some random data data = np.random.randn(2, 3) data arra

  • python 将numpy维度不同的数组相加相乘操作

    第一种 np矩阵可以直接与标量运算 >>>import numpy as np >>>arr1 = np.arange(12).reshape([2,2,3]) >>>arr1 array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]]) >>>arr1*5 array([[[ 0, 5, 10], [15, 20, 25]], [[30, 35, 40], [45, 50

  • Numpy ndarray 多维数组对象的使用

    介绍 目前它是Python数值计算中最为重要的基础包,将numpy的数组的对象作为数据交互的通用语,一般我们要充分理解好矩阵计算的原理,这需要你要有一些线性代数的基础知识.在对数据处理.清洗.构造子集.过滤.变换以及其他计算的过程快速的进行向量化计算,后续也会介绍R语言,因为R语言就是一个原生态基于向量化计算的编程语言. Numpy的核心特征之一就是一个N维数组对象--ndarray,这是一个快速灵活的大型数据集容器,可以进行科学数值计算. 代码操作 import numpy as np 导入好

  • 解决numpy数组互换两行及赋值的问题

    看代码吧~ import numpy as np a = np.array([[1,1,1],[2,2,2],[3,3,3], [4,4,4]]) tmp = a[1] a[1] = a[2] a[2] = tmp tmp只是a[1]的另一个名字,它并不是将a[1]复制了之后,就与a[1]无关,或许可理解为一种引用.所以这段代码的效果并不能如愿互换原始a数组的第2行和第三行,而是会将2,3行都变成原来的第三行[3,3,3],像这样: array([[1, 1, 1], [3, 3, 3], [3

  • Numpy将二维数组添加到空数组的实现

    使用append函数将一个二维数组添加到一个空数组,关键是维度要对的上 a=np.empty([0,3]) b = np.array([[1,2,3],[4,5,6]]) c=[[7,8,9]] print(a.shape) print(b.shape) a = np.append(a, b, axis=0) a = np.append(a, c, axis=0) print(a.shape) print(b.shape) 以上这篇Numpy将二维数组添加到空数组的实现就是小编分享给大家的全部内

  • python numpy.power()数组元素求n次方案例

    如下所示: numpy.power(x1, x2) 数组的元素分别求n次方.x2可以是数字,也可以是数组,但是x1和x2的列数要相同. >>> x1 = range(6) >>> x1 [0, 1, 2, 3, 4, 5] >>> np.power(x1, 3) array([ 0, 1, 8, 27, 64, 125]) >>> x2 = [1.0, 2.0, 3.0, 3.0, 2.0, 1.0] >>> np.

  • numpy 声明空数组详解

    你搜索这个,你会发现好多都是np.zeros(5,2),嗯都是复制的一个国外的帖子,然而没有翻译人家的话. 然后你愤怒的关闭页面.这简直就是文不对题,这哪是空的. 实际上,numpy的数组机制并不支持空数组.(什么鬼答案?)简单来讲就是numpy会申请连续的内存,如果频繁改变大小,他就要频繁申请新的内存.如果你会c语言知道指针的话,你很容易就能想到他不是list格式而是array格式. 如果你不会c语言,那么也没有关系.不影响.只需要记住,numpy的数组一旦变动大小就会像搬家一样大包小包的带着

  • 如何将numpy二维数组中的np.nan值替换为指定的值

    基础知识: (1)np.nan表示该值不是一个数,比如数据中收入.年龄的缺失值:np.inf表示无穷大 (2)np.nan == np.nan 的结果为False (3)nan与任何数的操作结果均为nan,例如sum((np.nan,4)) 的结果为nan (4)一个ndarray数组t1,可以用np.isnan(t1) 定位到nan值的位置,再用t1[np.isnan(t1)] = 指定值 将nan替换为指定值 (5)np.nan_to_num(t1),可以将t1中的nan替换为0 (6)t1

  • 如何在向量化NumPy数组上进行移动窗口

    今天很有可能你已经做了一些使用滑动窗口(也称为移动窗口)的事情,而你甚至不知道它.例如:许多编辑算法都是基于移动窗口的. 在GIS中做地形分析的大多数地形栅格度量(坡度.坡向.山坡阴影等)都基于滑动窗口.很多情况下,对格式化为二维数组的数据进行分析时,都很有可能涉及到滑动窗口. 滑动窗口操作非常普遍,非常有用.它们也很容易在Python中实现.学习如何实现移动窗口将把你的数据分析和争论技能提升到一个新的水平. 什么是滑动窗? 下面的例子显示了一个3×3(3×3)滑动窗口.用红色标注的数组元素是目

  • 在NumPy中创建空数组/矩阵的方法

    如何在NumPy中创建空数组/矩阵? 在添加行的情况下,你最好的选择是创建一个与数据集最终一样大的数组,然后向它添加数据 row-by-row: >>> import numpy >>> a = numpy.zeros(shape=(5,2)) >>> a array([[ 0., 0.], [ 0., 0.], [ 0., 0.], [ 0., 0.], [ 0., 0.]]) >>> a[0] = [1,2] >>&g

  • Python 用NumPy创建二维数组的案例

    前言 上位机实战开发先放一放,今天来学习一个新的内容-NumPy的使用 1 一维数组 例:用普通方法生成一维数组 num = [0 for i in range(1,5)] # 创建一维数组 print(num) # 打印数组 print("-"*50) # 分割线 num[2]=6 # 将第三个元素修改位6 print(num) # 打印数组 print("-"*50) # 分割线 运行结果 例:用numpy生成一维数组 from numpy import * m

随机推荐