我有一个数组吧
`(datetime.datetime(2017, 4, 27, 0, 0), 2970.0, 3018.0, 2958.0, 3016.0, 4814822.0),
(datetime.datetime(2017, 4, 28, 0, 0), 3035.0, 3115.0, 3026.0, 3115.0, 6604372.0)],
dtype=[('Timestamp', 'O'), ('open', '<f8'), ('high', '<f8'), ('low', '<f8'), ('close', '<f8'), ('atr', '<f8')])`
我想将其硬拷贝到另一个数组中,并更改目标数组列名:
destBars = bars.copy()
destBars.dtype.names=['Timestamp','hl','oh','ol','tr','atr']
bars.dtype.names
('Timestamp', 'hl', 'oh', 'ol', 'tr', 'atr')
但之后栏数列也发生了变化。这不是我的预期,我希望bars.dtype.names
保持不变。
有人可以解释什么是错的,我应该怎么做?
答案 0 :(得分:2)
而不是copy
,使用deepcopy
模块的copy
。
尝试以下代码并检查
import copy
destBars = copy.deepcopy(bars)
答案 1 :(得分:1)
显然,结构化数组副本会复制数据缓冲区,但仍会共享ggplot(my_data, aes(Date, Count, group = 1)) +
geom_line(colour = "blue") +
geom_point(colour = "blue") +
geom_point(aes(y = roll_mean), colour = "red") +
facet_wrap(~ID)
#> Warning: Removed 3 rows containing missing values (geom_point).
个对象。我从来没有探究过这个,但我并不感到惊讶:
zzz <- "YYYYMM Date ID Count
201401 01/01/2014 A 151
201401 01/01/2014 B 68
201401 01/01/2014 C 487
201401 02/01/2014 A 198
201401 02/01/2014 B 97
201401 02/01/2014 C 403"
my_data <- read_table(zzz)
对象id的匹配
dtype
没有复制方法。
从In [206]: x = np.ones(3, dtype='i,i')
In [207]: x
Out[207]:
array([(1, 1), (1, 1), (1, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
In [208]: id(x.dtype)
Out[208]: 2860363240
In [209]: y = x.copy()
In [210]: id(y.dtype)
Out[210]: 2860363240
后跟x.dtype
制作新的dtype:
descr
最好在astype
之后更改名称。否则我得到一个Futurewarning。
In [5]: x=np.ones(3, 'i,i')
In [6]: dt1=np.dtype(x.dtype.descr)
In [7]: y=x.astype(dt1)
In [8]: y.dtype.names=['a','b']
In [9]: y
Out[9]:
array([(1, 1), (1, 1), (1, 1)],
dtype=[('a', '<i4'), ('b', '<i4')])
In [10]: x
Out[10]:
array([(1, 1), (1, 1), (1, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
答案 2 :(得分:0)
我认为这就是你想要的:
data.astype([('atr','atr1')])