-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Description
I'm trying to wrap my head around the following issue. Arrays read from Datasets are created with numpy.memmap with "copyonwrite" flag set. So these numpy arrays can be changed in memory but not in the file. This is not true for arrays read from attributes. There we get back a numpy.ndarray with the writable-flag set to FALSE
. An MCVE is attached below.
I was already looking where the flag might be set and why, but didn't come far. Any hints much appreciated.
MCVE:
import numpy as np
import h5py
import pyfive
with h5py.File("test.h5", mode="w") as f:
f.attrs["att"] = np.arange(10)
f["arr"] = np.arange(10)
with pyfive.File("test.h5") as f:
# dataset
arr = f["arr"][:]
print(type(arr))
print(arr.flags)
print(arr.base)
arr += 1
print(arr)
# attribute
att = f.attrs["att"]
print(type(att))
print(att.flags)
print(att.base)
att += 1
print(att)
<class 'numpy.memmap'>
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
[0 1 2 3 4 5 6 7 8 9]
[ 1 2 3 4 5 6 7 8 9 10]
<class 'numpy.ndarray'>
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : False
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
[0 1 2 3 4 5 6 7 8 9]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [23], in <cell line: 9>()
20 print(att.flags)
21 print(att.base)
---> 22 att += 1
23 print(att)
ValueError: output array is read-only
Metadata
Metadata
Assignees
Labels
No labels