当前位置: 首页 > news >正文

numpy的array/asarray/asanyarray的格式转化错误问题解决

关于numpy的array()、asarray()、asanyarray()

当前numpy版本:1.26.3

有时一些依赖numpy的旧项目,在运行时,会出现如下错误

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part

这个ValueError错误通常发生在你尝试将一个序列(比如列表或元组)赋值给一个数组(numpy数组)的元素时,而这个数组元素的大小与序列中的元素数量不匹配。简单来说,就是你试图把一个长度大于1的序列放入一个一维数组的单个位置中,或者试图把一个序列放入一个二维数组的单个位置中,而这个位置应该存放一个与序列长度相同的子序列。

解决办法

降低numpy的版本,这里使用conda直接安装1.23.5的版本

conda install numpy==1.23.5

安装完成后,验证一下

import numpy as nparr= [[1,2],[1,2,3]]
np.asarray(arr) # 或者使用 asanyarray()

使用时,提示了一下waring

/tmp/ipykernel_105515/1083838339.py:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.np.asarray(arr)

上面,提示了一个warring,勉强接受了,当然可以再找更旧的numpy版本,应该就不会出现这个问题,比如1.15.0版本的是默认直接转化的,不给任何提示的;

查看一下转化后的数据结构,如下所示,数组的元素转化为了list

array([list([1, 2]), list([1, 2, 3])], dtype=object)

新版本的asnumpy、asanynumpy是不支持这种,维度不相同的格式转化,我们最后看看numpy的array()、asarray()、asanyarray()这几个的作用

1、numpy.array()

作用:
numpy.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0) 函数用于创建一个数组。

参数和返回值:
参数:
object:数组的输入数据,可以是列表、元组、其他数组或者其他可迭代对象。
dtype(可选):所需的数组数据类型,可以是字符串、类型对象或者 None。如果未提供,则将根据输入数据推断出数据类型。
copy(可选):如果为 True(默认),则复制输入数据;如果为 False,则尽可能地使用输入数据的视图。
order(可选):创建数组时使用的存储顺序,可以是 ‘C’(按行存储)或 ‘F’(按列存储)。
subok(可选):如果为 True,则返回一个与 object 相同类型的子类数组;如果为 False(默认),则返回一个基类数组。
ndmin(可选):生成的数组的最小维度。

返回值:返回一个新的numpy数组。

注意事项:
array 函数用于将输入数据转换为数组。
输入数据可以是列表、元组、其他数组或者其他可迭代对象。
生成的数组的数据类型可以通过 dtype 参数指定,如果未提供,则将根据输入数据推断出数据类型。
可以通过 copy 参数控制是否复制输入数据。如果 copy=True(默认),则复制输入数据;如果 copy=False,则尽可能地使用输入数据的视图。
order 参数用于指定生成数组时的存储顺序。默认情况下,使用 ‘K’,即保持输入数据的存储顺序。可以选择按行存储(‘C’)或按列存储(‘F’)。
subok 参数用于控制返回的数组类型。如果为 True,则返回一个与输入数据相同类型的子类数组;如果为 False(默认),则返回一个基类数组。
ndmin 参数用于指定生成数组的最小维度。默认情况下,数组的维度由输入数据的维度决定。

2、numpy.asarray()

作用:
numpy.asarray(a, dtype=None, order=None) 函数将输入转换为数组。

参数和返回值:
参数:
a:输入数据,可以是列表、元组、其他数组或者其他可迭代对象。
dtype(可选):所需的数组数据类型,可以是字符串、类型对象或者 None。如果未提供,则将根据输入数据推断出数据类型。
order(可选):创建数组时使用的存储顺序,可以是 ‘C’(按行存储)或 ‘F’(按列存储)。

返回值:返回一个新的数组

注意事项:
asarray 函数用于将输入数据转换为数组,与 array 函数的功能相似。
输入数据可以是列表、元组、其他数组或者其他可迭代对象。
生成的数组的数据类型可以通过 dtype 参数指定,如果未提供,则将根据输入数据推断出数据类型。
可以通过 order 参数控制生成数组时的存储顺序。默认情况下,使用输入数据的存储顺序。
如果输入数据已经是一个数组,asarray 函数将原样返回,而不是复制数组。
与 array 函数不同,asarray 函数不具有 copy、subok 和 ndmin 参数。

3、numpy.asanyarray()

作用:
numpy.asanyarray(a, dtype=None) 函数将输入转换为 ndarray 对象,但保留子类数组的子类性质。

参数和返回值:
参数:
a:输入数据,可以是列表、元组、其他数组或者其他可迭代对象。
dtype(可选):所需的数组数据类型,可以是字符串、类型对象或者 None。如果未提供,则将根据输入数据推断出数据类型。
返回值:返回一个新的numpy 数组。

注意事项
asanyarray 函数用于将输入数据转换为 ndarray 对象,与 array 函数和 asarray 函数不同的是,它保留了子类数组的子类性质。
输入数据可以是列表、元组、其他数组或者其他可迭代对象。
生成的数组的数据类型可以通过 dtype 参数指定,如果未提供,则将根据输入数据推断出数据类型。
如果输入数据已经是一个数组,asanyarray 函数将原样返回,而不是复制数组。
asanyarray 函数不具有 order 参数。

4、三者的区别

numpy.array 用于创建数组,适用于各种输入数据类型。
numpy.asarray 用于将输入转换为数组,与 array 函数的功能相似,但不具有 copy、subok 和 ndmin 参数。
numpy.asanyarray 用于将输入转换为 ndarray 对象,保留子类数组的子类性质,不具有 order 参数。

内容来源:https://baijiahao.baidu.com/s?id=1769755191352203083&wfr=spider&for=pc

http://www.lryc.cn/news/380954.html

相关文章:

  • C++:STL容器-map
  • 你好,复变函数2.0
  • 汉语拼音字母表 (声母表和韵母表)
  • C++20中的Feature Test Mocros
  • 运维iptables与firewalld详解
  • 适用于 Android 的 几种短信恢复应用程序
  • Lodash-js工具库
  • Makefile实战论(一)
  • Hi3861 OpenHarmony嵌入式应用入门--PWM 三色灯
  • CH5xx USB下载工具
  • 问题1.用PGP解密出keybox.xml,过程中报“Can‘t check signature: No public key”如图,这个正常吗?如何解决?
  • 网络物理隔离后 可以用保密U盘进行数据安全交换吗?
  • 机械臂 CoppeliaSim Simulink联合仿真
  • MySQL数据库(一):数据库介绍与安装
  • 天津媒体邀约,及媒体名单?
  • Java | Leetcode Java题解之第168题Excel表列名称
  • 代码随想录算法训练营刷题复习10:二叉树、二叉搜索树复习2
  • 预测准确率达95.7%,ChatMOF利用LLM预测和生成金属有机框架,包含人工智能词汇表(AI glossary)
  • 【Linux】环境基础开发工具使用(yum、vim、gcc/g++、gdb、make/Makefile)
  • Linux基础二
  • Linux运维面试--yum安装和编译安装区别
  • redis 的内存尽量不要超过 10g,超过 10g 可能会有问题
  • 力扣(2024.06.23)
  • OpenCV颜色检测
  • VScode开发ARM环境搭建
  • AI-人工智能指数报告(四):科学、医学与教育
  • Redis内存数据库
  • LabVIEW高精度电能质量监测系统
  • Java程序之可爱的小兔兔
  • ▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】