- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在某些情况下,原始的 numpy 数组需要被串联的 numpy 数组覆盖。我想讨论一个复杂结构化数组中的 numpy 数组的示例。这个问题是通过回答有关结构化数组的问题 https://stackoverflow.com/a/27563022/2062965 产生的.
import numpy as np
x = np.zeros(1, dtype = [('Table', float64, (2, 2)),
('Number', float),
('String', '|S10')])
# Append values to the array
print(np.append(x['Table'], array([[[1], [2]]]), axis=2))
# This assignment will lead to the error message mentioned below:
x['Table'] = np.append(x['Table'], array([[[1], [2]]]), axis=2)
有几种解决方法,例如 numpy.append
、numpy.concatenate
、numpy.vstack
或 numpy.hstack
。
它们中的每一个都创建一个新数组,不能通过返回如下错误消息将其分配回旧变量:
ValueError: could not broadcast input array from shape (1,2,3) into shape (1,2,2)
作为一个直接但耗时的解决方案,我可以定义一个新的空 numpy 数组,我用旧数据和应该追加的数据填充它。
也感谢您提供其他解决方案。
最佳答案
A numpy
array 将其数据保存在固定大小的缓冲区中。类似 shape
的属性, strides
和 dtype
用于解释该数据。这些属性可以更改,数据缓冲区中的值也可以更改。但是任何改变缓冲区大小的东西都需要一个副本。
append
, concatenate
等都创建一个新数组,并用原始数组中的数据填充它。
你的 append
操作创建一个新的 (1,2,3)
大批。它不能替代 (1,2,2)
x
中的字节串缓冲区。
如果('Table', float64, (2, 2))
被 ('Table', object)
取代, 然后 x['Table']
可以改变。那是因为x
现在包含指向单独数组的指针。该赋值将一个指针替换为另一个指针,而不更改 x
的大小。缓冲。这就像更改字典的值,或替换列表中的嵌套列表。
为什么要尝试使用结构化数组而不是像 list
这样的传统 Python 结构? , dict
或自定义类对象?
这是一个有效的序列:
In [116]: x = np.zeros(1, dtype = [('Table', 'O'),
('Number', np.float),
('String', '|S10')])
In [117]: x['Table'][0] = np.zeros((2,2),dtype=np.float64)
In [118]: x['Table'][0] = np.append(x['Table'][0], np.array([[[1], [2]]]))
In [119]: x
Out[119]:
array([([0.0, 0.0, 0.0, 0.0, 1.0, 2.0], 0.0, '')],
dtype=[('Table', 'O'), ('Number', '<f8'), ('String', 'S10')])
但请注意,我必须将新数组分配给 x['Table'][0]
- “表格”字段中的“行”。
In [120]: x['Table']
Out[120]: array([array([ 0., 0., 0., 0., 1., 2.])], dtype=object)
x['Table']
是另一个结构化数组。
回顾你的原创x
定义,让我们给它 3 个“行”(元素):
In [132]: x = np.zeros(3, dtype = [('Table', np.float64, (2, 2)),
('Number', np.float),
('String', '|S10')])
In [133]: x
Out[133]:
array([([[0.0, 0.0], [0.0, 0.0]], 0.0, ''),
([[0.0, 0.0], [0.0, 0.0]], 0.0, ''),
([[0.0, 0.0], [0.0, 0.0]], 0.0, '')],
dtype=[('Table', '<f8', (2, 2)), ('Number', '<f8'), ('String', 'S10')])
In [134]: x['Table'].shape
Out[134]: (3, 2, 2)
x
的数据缓冲区是一系列浮点 0,散布着 10 个空白。当我要求 x['Table']
它给了我 12 个 0 的非连续 View ,带有 (3,2,2)
形状。
我可以更改该数组的元素:
In [137]: x['Table'][0,0,:]=[1,1]
但无论如何我都无法扩展它 - 除非创建一个新的 x
数组。
另一种类似构造的结构是字典:
In [156]: x={'Table': np.zeros((1,2,2),dtype=np.float64),
'Number':np.zeros((1,)),
'String':['']}
In [157]: x
Out[157]:
{'Number': array([ 0.]),
'String': [''],
'Table': array([[[ 0., 0.],
[ 0., 0.]]])}
In [158]: x['Table'] =np.append(x['Table'],[1,2])
In [159]: x
Out[159]:
{'Number': array([ 0.]),
'String': [''],
'Table': array([ 0., 0., 0., 0., 1., 2.])}
从 CSV 文件读取时,像这样的复杂数据结构最有意义。例如
In [161]: dt = np.dtype([('Table', np.float64, (2, 2)),
('Number', np.float),
('String', '|S10')])
In [162]: txt="""0 0 0 0 0 astring
.....: 1 2 3 4 0 another
.....: 1 1 1 1 10 end
.....: """
In [163]: A=np.genfromtxt(txt.splitlines(),dtype=dt)
In [164]: A
Out[164]:
array([([[0.0, 0.0], [0.0, 0.0]], 0.0, 'astring'),
([[1.0, 2.0], [3.0, 4.0]], 0.0, 'another'),
([[1.0, 1.0], [1.0, 1.0]], 10.0, 'end')],
dtype=[('Table', '<f8', (2, 2)), ('Number', '<f8'), ('String', 'S10')])
genfromtxt
读取行,将它们解析为列表的列表,并且仅在最后将它们打包到结构化数组中。
关于arrays - python : append to numpy array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27619678/
Racket 的 pict , 有几个 combinators for combining other pictures .这些文档包含一个很好的表格,说明其 *-append 组合器的工作方式: 这
我看过 Insert content into iFrame和他们的 fiddle http://jsfiddle.net/8VP4y/3/提出以下我遇到问题的代码。 我已经为下面的问题创建了一个 j
我有一个显示非常奇怪结果的微基准: @BenchmarkMode(Mode.Throughput) @Fork(1) @State(Scope.Thread) @Warmup(iterations =
我想知道是否有人可以回答我使用 StringBuilder 对象在 java 中执行这些语句中的哪一个会更好: 使用 .append(string1 + string 2) 对比 .append(st
假设我有两个相同类型的流。是否可以将一个流 append 到另一个流而无需事先将它们转换为列表? 例子: Stream ms = ...; Stream ns = ...; return ms.app
我有以下有效的 jQuery 代码,但它让我思考是否可以对正在 append 的内容执行 append 操作,而无需指定我想要 append 的内容。 append().append() 并没有达到目
这是为了显示诊断页面的检查。我有一个 .append(not_ok) 但当 swf 文件加载 100% 时,我想删除 not_ok 附加,然后添加一个 .append(ok)。 function ca
x = [[1,2],[2,3],[10,1],[10,10]] def duplicatingRows(x, l): severity = x[l][1] if severity =
我有一个列表,我正在尝试将数据注入(inject)其中。列表如下所示 data2 = ['TECH2_HELP', 'TECH2_1507', 'TECH2_1189', 'TECH2_4081',
为了有效地进行一些 DOM 操作,我分离了一个元素。在这个过程中,我遇到了一个有趣的情况: var $holder = $("#d"); var $wrapper = $("").css("borde
我遇到了图片在移动设备上加载速度不够快的问题。我的元素有一个图像和一个按钮。单击该按钮时,图像向下滑动,另一幅图像从顶部滑动以取代它。这是代码 html CSS .moveF
我正在编写一个包含 10 个遗愿 list 的简单哈希表。使用内置的 hash() 计算索引,然后对表大小取模。但是,当我尝试将该对象 append 到该索引处的存储桶列表时,它会 append 到每
我是 LISP 的新手,我正在尝试处理类的 cond 语句。目前,我正在尝试检查传递的值是否为列表,如果是,则将字母 d append 到列表中。 这是我的代码: (defun test(L) (li
我正在使用 Jquery 将数据 append 到 div。但是,append 语句之后页面上没有显示任何内容。 我尝试使用 $(window).load 来确保页面已加载,但这仍然不起作用。 HTM
我有以下代码; function SetupDropdowns() { var PrevType; dropdown1 = document.getElemen
我想在 smarty 中创建一个数组并在其中执行 append 功能!就像我在 smarty 模板中声明一个变量(如 {assign var=sizearr value=''} )然后我想在循环中向其
请考虑以下代码片段: var ul = $(".list_b").find("li").remove().end(); $.each(Sites, functi
我的日志记录配置中有两个 appenders。其中之一在 ERROR 事件上发送电子邮件。 一个类,我无法控制,垃圾邮件 ERROR 消息。所以我仍然想要那些消息,但不是在两个 appenders 中
我正在尝试制作 editText,我要在其中插入一些文本。在每三个字符之后,我想插入破折号。 例子: 类型:123 结果:123- 现在当光标在破折号后面并且你按下删除键时,我想删除破折号和破折号
当我尝试 append 简单的“hello”时,它会被 append ,但很快就会自动删除。仅当我在下面给出的表单中使用它时,才会出现此问题,如果删除该表单,则不会出现问题,并且 hello 会正确
我是一名优秀的程序员,十分优秀!