相关疑难解决方法(0)

如何判断NumPy是创建视图还是副本?

对于最小的工作示例,让我们数字化2D数组.numpy.digitize需要一维数组:

import numpy as np
N = 200
A = np.random.random((N, N))
X = np.linspace(0, 1, 20)
print np.digitize(A.ravel(), X).reshape((N, N))
Run Code Online (Sandbox Code Playgroud)

现在文档说:

......只在需要时才制作副本.

ravel在这种情况下,如何知道副本是否"需要"?通常 - 有没有办法可以确定特定操作是创建副本还是视图?

python numpy copy

63
推荐指数
2
解决办法
1万
查看次数

有没有办法检查NumPy阵列是否共享相同的数据?

我的印象是,在NumPy中,两个阵列可以共享相同的内存.请看以下示例:

import numpy as np
a=np.arange(27)
b=a.reshape((3,3,3))
a[0]=5000
print (b[0,0,0]) #5000

#Some tests:
a.data is b.data #False
a.data == b.data #True

c=np.arange(27)
c[0]=5000
a.data == c.data #True ( Same data, not same memory storage ), False positive
Run Code Online (Sandbox Code Playgroud)

所以显然b没有复制a; 它只是创建了一些新的元数据并将其附加到a正在使用的相同内存缓冲区中.有没有办法检查两个数组是否引用相同的内存缓冲区?

我的第一印象是使用a.data is b.data,但返回false.我能做的a.data == b.data,返回真,但我不认为检查,以确保ab共享相同的内存缓冲区,只有内存块被引用a和引用的一个b具有相同的字节.

python numpy

38
推荐指数
4
解决办法
7440
查看次数

如何检查两片numpy数组是否相同(或重叠)?

我想检查两个ndarray是否是相同底层ndarray的重叠视图.

要检查两个切片是否完全相同,我可以执行以下操作:

a.base is b.base and a.shape == b.shape and a.data == b.data
Run Code Online (Sandbox Code Playgroud)

缓冲区的比较似乎只在一个简单的情况下工作 - 任何人都可以告诉我它是否有效吗?

不幸的是,这不适用于重叠切片,我还没有弄清楚如何从缓冲区中提取其底层数据中的偏移量 - 也许有人可以帮我解决这个问题?

而且,说ab是切片x,并且c是切片b.由于基础数据相同,我还想检测c和之间的重叠a.看起来我应该能够通过比较缓冲和形状......如果有人能告诉我具体如何,我将不胜感激.

python numpy

8
推荐指数
1
解决办法
1537
查看次数

Numpy重塑视图

我对在视图上操作的numpy reshape的结果感到困惑.在下面的q.flags中显示它不拥有数据,但q.base既不是x也不是y,那么它是什么?我很惊讶地看到q.strides是8,这意味着它每次在内存中移动8个字节时获得下一个元素(如果我理解正确的话).但是,如果x以外的数组都没有数据,则唯一的数据缓冲区来自x,它不允许通过移动8个字节来获取q的下一个元素.

In [99]: x = np.random.rand(4, 4)

In [100]: y = x.T

In [101]: q = y.reshape(16)

In [102]: q.base is y
Out[102]: False

In [103]: q.base is x
Out[103]: False

In [104]: y.flags
Out[104]: 
  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

In [105]: q.flags
Out[105]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

In [106]: q.strides
Out[106]: …
Run Code Online (Sandbox Code Playgroud)

python numpy reshape

5
推荐指数
1
解决办法
1240
查看次数

如何找到所有具有相同ID的变量?

假设我有一个numpy数组ab像这样创建:

a = np.arange(3)
b = a
Run Code Online (Sandbox Code Playgroud)

如果我现在改变b例如这样

b[0] = 100
Run Code Online (Sandbox Code Playgroud)

并打印a, b, 他们的ids 和.flags

print a
print a.flags    
print b
print b.flags
print id(a)
print id(b)
Run Code Online (Sandbox Code Playgroud)

我得到

[100   1   2]

  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

[100   1   2]

  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy copy

1
推荐指数
1
解决办法
205
查看次数

标签 统计

numpy ×5

python ×5

copy ×2

arrays ×1

reshape ×1