Python数据分析(3)-numpy中nd数组的创建

1、ndarray的内存结构

和其他的库一样,每个库都可能有自己独特的数据结构,例如OpenCV,numpy库的多维数组叫做ndarray( N dimensionality array ),它的内存结构如下图:

ndarray的内存结构 在这个结构体中有两个对象,一个是用来描述元素类型的头部区域,一个是用来储存数据的数据区域。(事实上大多数数据类型的数据都是这么储存的)。

2、ndarray对象的创建

2.1 ndarray多维数组的创建常规方法 创建一个3*3的数组并在屏幕打印它以及它的类型和维数:

import numpy as np

x = np.array([[0,1,2],[3,4,5],[6,7,8]],dtype = np.int32)
print('这个数组是:',x)
print('这个数组的数据类型是:',x.dtype)
print('这个数组的大小:',x.shape)

屏幕输出结果:

我们也可以采用更加直接的办法:

import numpy as np
x = np.arange(0,9).reshape(3,3)
print('这个数组是:',x)
print('这个数组的数据类型是:',x.dtype)
print('这个数组的大小:',x.shape)

屏幕上打印输出的结果和前一种的结果是一样的。

2.2 ndarray多维数组的创建其他方法 除了常规方法,numpy还提供了一些其他的创建方法: 2.2.1 创建全0或者全1的数组

例如:

import numpy as np

x = np.ones([3,3])
print('这个数组是:',x)
print('这个数组的数据类型是:',x.dtype)
print('这个数组的大小:',x.shape)
>>> x = np.arange(6) 
>>> x = x.reshape(2,3)
>>> x     
array([[0, 1, 2], [3, 4, 5]]) 
>>> np.ones_like(x) 
array([[1, 1, 1], [1, 1, 1]])
>>> y = np.arange(3, dtype=np.float) 
>>> y 
array([ 0., 1., 2.]) 
>>> np.ones_like(y) 
array([ 1., 1., 1.])

当然也可以填充其他的数:

import numpy as np
x = np.full([3,3],np.inf)
print('这个数组是:',x)
print('这个数组的数据类型是:',x.dtype)
print('这个数组的大小:',x.shape)

打印输出:

2.2.2 从已存在的数据中创建数组

>>> np.array([1, 2, 3]) 
array([1, 2, 3])

>>> np.array([1, 2, 3.0]) 
array([ 1., 2., 3.])

>>> np.array([[1, 2], [3, 4]]) 
array([[1, 2], [3, 4]])

>>> np.array([1, 2, 3], ndmin=2) 
array([[1, 2, 3]])

>>> np.array([1, 2, 3], dtype=complex) 
array([ 1.+0.j, 2.+0.j, 3.+0.j])

>>> x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')]) 
>>> x['a'] 
array([1, 3])

2.2.3 创建记录阵列(record array,可能翻译不准):创建一个阵列,将其他数组集中在一起管理,并可以命名:

例如:

import numpy as np

x1 = np.arange(0,3)
x2 = np.array(['ff','hh','yy'])
x3 = ([1,2,3])
r = np.core.records.fromarrays([x1,x2,x3],names='a,b,c')
print(r[2])
print(r.a)

2.2.4 创建字符数组 numpy提供了专门的函数创建字符数组:np.chararray() 首先看看它的参数: Parameters | ———- | shape : tuple | Shape of the array. | itemsize : int, optional | Length of each array element, in number of characters. Default is 1. | unicode : bool, optional | Are the array elements of type unicode (True) or string (False). | Default is False. | buffer : int, optional | Memory address of the start of the array data. Default is None, | in which case a new array is created. | offset : int, optional | Fixed stride displacement from the beginning of an axis? | Default is 0. Needs to be >=0. | strides : array_like of ints, optional | Strides for the array (see ndarray.strides for full description). | Default is None. | order : {‘C’, ‘F’}, optional | The order in which the array data is stored in memory: ‘C’ -> | “row major” order (the default), ‘F’ -> “column major” | (Fortran) order.

 Examples
 |  --------
 |  >>> charar = np.chararray((3, 3))
 |  >>> charar[:] = 'a'
 |  >>> charar
 |  chararray([['a', 'a', 'a'],
 |         ['a', 'a', 'a'],
 |         ['a', 'a', 'a']],
 |        dtype='|S1')
 |  
 |  >>> charar = np.chararray(charar.shape, itemsize=5)
 |  >>> charar[:] = 'abc'
 |  >>> charar
 |  chararray([['abc', 'abc', 'abc'],
 |         ['abc', 'abc', 'abc'],
 |         ['abc', 'abc', 'abc']],
 |        dtype='|S5')

2.2.5 创建数值数组

import numpy as np

x1 = np.arange(0,3,1)
x2 = np.linspace(0,3,4)
x3 = np.logspace(1,8,3)
x4 = np.mgrid[0:3,0:3]
x5 = np.ogrid[0:3,0:3]
print(x1,x2,x3,x4,x5)

2.2.6 创建矩阵

2.2.7 矩阵类(The matrix class)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏http://www.cnblogs.com

生成器&迭代器

一.生成器 在介绍生成器表达式之前,先看下列表表达式: 1 >>> l = [i for i in range(50) if i % 2] #生成...

33910
来自专栏书山有路勤为径

栈与队列基础知识

栈,是先进后出的线性表,标准STL的栈包括如下5种操作,设栈S: 1.取出栈顶元素:S.top(); 2.判断栈是否为空:S.empty(); 3.将元素...

702
来自专栏编程微刊

从列表中或数组中随机抽取固定数量的元素组成新的数组或列表

2:jQuery版本 那么jQuery中怎么随机选出固定数组数组[1, 2, 3, 4, 5, 6, 7, 8, 9]中的三个元素,并构造成新数组的?

761
来自专栏IT可乐

深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

  上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点。这篇博客我们将介绍C语言中的有符号...

2378
来自专栏猿人谷

求子数组的最大和

分析:输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个正数,求所有子数组的和的最大值。 当我们加上一个正数时,和会增加;当我们加上一个负数时,和会...

19310
来自专栏AI派

Numpy 修炼之道 (10)—— 结构化数组

之前我们操作Numpy的数组时,都是通过索引来操作的。针对二维数组,使用索引可以完成对行、列的操作。但是这是非常不直观的。可以把二维数组想象成一个excel表格...

4395
来自专栏猿人谷

size_type、size_t、differentce_type以及ptrdiff_t

目录(?)[-] size_type size_t different_type ptrdiff_t size_t是unsigned类型,用于指明数...

2107
来自专栏CodeSheep的技术分享

Java编程思想学习录(连载之:一切都是对象)

1598
来自专栏数据结构与算法

P3374 【模板】树状数组 1 单点修改与区间查询

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N...

2887
来自专栏技术碎碎念

LeetCode-15-3Sum

Given an array S of n integers, are there elements a, b, c in S such that a + b ...

36511

扫码关注云+社区