jjzjj

Numpy || np.array()函数用法指南

请你喝奶茶~ 2023-10-15 原文

1、Numpy ndarray对象

numpy ndarray对象是一个n维数组对象,ndarray只能存储一系列相同元素。

#一维数组
[1,2,3,4]	#shape(4,)

#二维数组
[[1,2,3,4]]	#shape(1,4)

[[1,2,3,4],
 [5,6,7,8]]	#shape(2,4)

#三维数组
[
    [[1,2,3],[4,5,6]],
    [[7,8,9],[10,11,12]]
]	#shape(2,2,3)

2、创建numpy数组

numpy.array()使用说明:object是必须输入的参数,其余为可选参数。

import numpy as np
np.array(object,dtype,copy=True,order,ndmin,subok=Fasle)
#	object: 一个数组序列,例如[1,2,3,4]
#	dtype: 更改数组内的数据类型
#	copy: 数据源是ndarray时数组能否被复制,default=True
#	order: 选择数组的内存布局,C(行序列)|F(列序列)|A(默认)
#	ndmin: 数组维度
#	subok: bool类型,True,使用object的内部数据类型;False,使用object的数组的数据类型,default=Fasle

创建存储元素类型不同的数组:

#int型
import numpy as np
a=np.array([1,2,3,4],dtype=int)	#"dtype="可省略
print(a)
a.dtype
'''
输出:
[1 2 3 4]
dtype('int32')
'''

#float型
b=np.array([1,2,3,4],dtype=float)
print(b)
b.dtype
'''
输出:
[1. 2. 3. 4.]
dtype('float64')
'''

创建生成器:

a=np.array([i*10 for i in range(10)])
print(a)
b=np.array([i+2 for i in range(10)])
print(b)
'''
输出:
[ 0 10 20 30 40 50 60 70 80 90]
[ 2  3  4  5  6  7  8  9 10 11]
'''

当输入的object元素有不同类型时,将保留存储空间最大的类型:

x1=np.array([1,2,3,4,5.1])
print(x1)
x2=np.array([1,2,3,'a'])
print(x2)
x3=np.array([1,2.1,'a'])
print(x3)
'''
输出:
[1.  2.  3.  4.  5.1]
['1' '2' '3' 'a']
['1' '2.1' 'a']
'''

当多维数组元素个数不一致时:

x=np.array([[1,2,3],[1,2,3,4],[1,2,3,4,5]],dtype=object) 	#存储长度不一致序列时,应有“dtype=object”,否则会报错
print(x)
print(x.shape)
print(x.ndim)	#输出数组的维度,2Darray强制转换成1Darray
'''
输出:
[list([1, 2, 3]) list([1, 2, 3, 4]) list([1, 2, 3, 4, 5])]
(3,)
1
'''

float强制转化int(向下取整):

a=np.array([1,2,3.1],int)
b=np.array([1,2,3.7],int)
print(a)
print(b)
'''
输出:
[1 2 3]
[1 2 3]
'''

用copy参数定义是否创建副本:

#默认copy=True情况下,复制创建x1的副本为x2
x1=np.array([1,2,3])
x2=np.array(x1)
print('x1 ',id(x1),'x2',id(x2))
#更改x2的值,x1的值不会发生改变,反之,修改x1的值,x2也不会发生改变,因为二者地址不同
x2[2]=100
print('x1',x1)
print('x2',x2)
'''
输出:
x1  2055556179312 x2 2055300844976   x1 x2地址不同
x1 [1 2 3]
x2 [  1   2 100]
'''

#copy=Fasle情况下,复制创建x1的副本为x2
x1=np.array([1,2,3])
x2=np.array(x1,copy=False) 
print('x1 ',id(x1),'x2',id(x2))
#更改x2的值,x1的值会发生改变,且x1永远等于x2,因为二者地址相同
x2[2]=100
print('x1',x1)
print('x2',x2)
'''
输出:
x1  2055300125584 x2 2055300125584   x1 x2地址相同
x1 [  1   2 100]
x2 [  1   2 100]
'''

#另一种创建副本方法:copy() 这种方法更常用
x1=np.array([1,2,3])
x2=x1.copy()
print('x1 ',id(x1),'x2',id(x2))
#更改x2的值,x1的值不会发生改变
x2[2]=100
print('x1',x1)
print('x2',x2)
'''
输出:
x1  2055556233040 x2 2055556062160
x1 [1 2 3]
x2 [  1   2 100]
'''

ps:如果直接用 x2=x1 的形式复制array,此时x1 x2 共用同一个地址

用ndmin改变数组维度(升维有效,降维无效):

a=np.array([1,2,3,4],ndmin=2)
print('a ',a)
b=np.array([[1,2],[1,2]],ndmin=3)
print('b ',b)
#2D降维成1D,但输出结果仍为2D
c=np.array([[1,2],[1,2]],ndmin=1)
print('c ',c)
'''
输出:
a  [[1 2 3 4]]
b  [[[1 2]
  [1 2]]]
c  [[1 2]
 [1 2]]
'''

用subok参数(bool值)确定数据类型:

x1=np.mat([1,2,3])
a1=np.array(x1) #存储为原类型
b1=np.array(x1,subok=True)  #存储为数组类型
print('x1 ',type(x1),'a1 ',type(a1),'b1 ',type(b1))

#原始格式为list,无论subok为何值都转换成数组类型
x2=[[1,2],[1,2],[1]]
a2=np.array(x2,dtype=object) #存储为原类型
b2=np.array(x2,dtype=object,subok=True)  #存储为数组类型
print('x2 ',type(x2),'a2 ',type(a2),'b2 ',type(b2))
'''
输出:
x1  <class 'numpy.matrix'> a1  <class 'numpy.ndarray'> b1  <class 'numpy.matrix'>
x2  <class 'list'> a2  <class 'numpy.ndarray'> b2  <class 'numpy.ndarray'>
'''

有关Numpy || np.array()函数用法指南的更多相关文章

  1. ruby - 在 Ruby 中实现 `call_user_func_array` - 2

    我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)

  2. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  5. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  6. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  7. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  8. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  9. ruby-on-rails - 将字符串转换为 ruby​​-on-rails 中的函数 - 2

    我需要一个通过输入字符串进行计算的方法,像这样function="(a/b)*100"a=25b=50function.something>>50有什么方法吗? 最佳答案 您可以使用instance_eval:function="(a/b)*100"a=25.0b=50instance_evalfunction#=>50.0请注意,使用eval本质上是不安全的,尤其是当您使用外部输入时,因为它可能包含注入(inject)的恶意代码。另请注意,a设置为25.0而不是25,因为如果它是整数a/b将导致0(整数)。

  10. ruby - Arrays Sets 和 SortedSets 在 Ruby 中是如何实现的 - 2

    通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复

随机推荐