相关疑难解决方法(0)

有没有办法检查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.shape给出了不一致的回答 - 为什么?

为什么这个程序

import numpy as np

c = np.array([1,2])
print(c.shape)
d = np.array([[1],[2]]).transpose()
print(d.shape)
Run Code Online (Sandbox Code Playgroud)

(2,)
(1,2)
Run Code Online (Sandbox Code Playgroud)

作为其输出?不应该

(1,2)
(1,2)
Run Code Online (Sandbox Code Playgroud)

代替?我在python 2.7.3和python 3.2.3中都得到了这个

python numpy

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

Numpy展平RGB图像阵列

我有1000个RGB图像(64X64),我想将其转换为(m,n)数组.

我用这个:

import numpy as np
from skdata.mnist.views import OfficialImageClassification
from matplotlib import pyplot as plt
from PIL import Image                                                            
import glob
import cv2

x_data = np.array( [np.array(cv2.imread(imagePath[i])) for i in range(len(imagePath))] )
print x_data.shape
Run Code Online (Sandbox Code Playgroud)

这给了我: (1000, 64, 64, 3)

如果我这样做:

pixels = x_data.flatten()
print pixels.shape
Run Code Online (Sandbox Code Playgroud)

我明白了: (12288000,)

但是,我需要一个具有以下尺寸的数组: (1000, 12288)

我怎样才能做到这一点?

python arrays numpy image-processing

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

在numpy中解释昏暗,形状,等级,尺寸和轴之间的差异

我是python和numpy的新手.我阅读了几个教程,但仍然对昏暗,等级,形状,aix和尺寸的差异感到困惑.我的想法似乎停留在矩阵表示.所以如果你说A是一个看起来像这样的矩阵:

A = 

1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)

那么我能想到的只是一个2x3矩阵(两行三列).在这里,我知道形状是2x3.但我真的无法超越二维矩阵的思维.我不明白例如dot()文档,当它表示"对于N维,它是a的最后一个轴上的和产品,而b的倒数第二个".我很困惑,无法理解这一点.我不明白,如果V是N:1向量而M是N:N矩阵,点(V,M)或点(M,V)如何工作以及它们之间的差异.

那么有人可以向我解释什么是N维数组,什么是形状,什么是轴以及它如何与dot()函数的文档相关?如果解释可视化这些想法会很棒.

python arrays numpy matrix

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

(n,) 在 numpy 和向量的上下文中是什么意思?

我尝试搜索 StackOverflow、谷歌搜索,甚至使用符号猎犬进行字符搜索,但无法找到答案。具体来说,我对Ch感到困惑。Nielsen 的Neural Networks and Deep Learning 的第 1 章,他说“假设输入a(n, 1) Numpy ndarray,而不是(n,) vector。”

起初我认为(n,)指的是数组的方向 - 所以它可能指的是一列向量,而不是只有一行的向量。但我不明白为什么我们需要(n,)(n, 1)两个-他们似乎在说同样的事情。我知道我误解了一些东西,但我不确定。

作为参考a,激活向量将输入到神经网络的给定层,然后通过权重和偏差进行转换以生成下一层的激活输出向量。

编辑:这个问题在“一列向量”(没有这样的东西)和“一列矩阵”(确实存在)之间模棱两可。“一行向量”和“一行矩阵”也是如此。

向量只是一个数字列表,或(等价地)向量空间基向量上的标量变换列表。如果一个向量只有一行(或一列),那么当我们将它写出来时,它可能看起来像一个矩阵。令人困惑的是,我们有时会提到“激活向量”,但实际上是指“转置的单行激活值矩阵,使其成为单列”。

请注意,在这两种情况下,我们都不是在讨论一维向量,该向量将是一个仅由一个数字定义的向量(除非,平凡地,n==1,在这种情况下,“列”或“行”区别的概念将毫无意义)。

python numpy machine-learning neural-network

8
推荐指数
2
解决办法
2168
查看次数

numpy 中的 (N,) 和 (N,1) 有什么区别?

我不确定 numpy 中 (N,) 和 (N,1) 之间的区别。假设两者都是一些特征,它们具有相同的N维,并且都有一个样本。有什么不同?

a = np.ones((10,))
print(a.shape) #(10,)
b = np.ones((10,1))
print(b.shape) #(10,1)
Run Code Online (Sandbox Code Playgroud)

numpy python-3.x

7
推荐指数
2
解决办法
6176
查看次数

python中A [0]和A [0:1] numpy数组之间的差异

我有一个像这样的numpy数组:

candidates = 

array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
        0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0],
       [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
        0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1],
       [1, 0, 1, 1, 1, 1, 0, 0, 1, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

为什么Numpy只有维度(n,)而不是(n,1)

一段时间以来,我一直很好奇.我可以忍受这种情况,但是如果不采取足够的照顾,它总会咬我,所以我决定将它发布在这里.假设以下示例(Numpy版本= 1.8.2):

a = array([[0, 1], [2, 3]])
print shape(a[0:0, :]) # (0, 2)
print shape(a[0:1, :]) # (1, 2)
print shape(a[0:2, :]) # (2, 2)
print shape(a[0:100, :]) # (2, 2)

print shape(a[0]) # (2, )
print shape(a[0, :]) # (2, )
print shape(a[:, 0]) # (2, )
Run Code Online (Sandbox Code Playgroud)

我不知道其他人的感受,但结果与我不一致.最后一行是列向量,而倒数第二行是行向量,它们应该具有不同的维度 - 在线性代数中它们可以做到!(第5行是另一个惊喜,但我暂时忽略它).考虑第二个例子:

solution = scipy.sparse.linalg.dsolve.linsolve.spsolve(A, b) # solution of dimension (n, )
analytic = reshape(f(x, y), (n, 1)) # analytic of dimension (n, 1)
error = solution - analytic
Run Code Online (Sandbox Code Playgroud)

现在错误是维度(n,n).是的,在第二行我应该使用(n,)而不是(n,1),但为什么呢?我以前经常使用MATLAB,其中一维向量具有维度(n,1),linspace/arange返回维度(n,1)的数组,并且从不存在(n,).但是在Numpy(n,1)和(n,)共存时,维度处理有很多功能:至少,newaxis和reshape的不同用途,但对我来说,这些功能更多的是混乱而不是帮助.如果数组打印如[1,2,3],那么直观地说维度应该是[1,3]而不是[3,],对吗?如果Numpy没有(n,),我只能看到清晰度的增益,而不是功能上的损失. …

python arrays numpy

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

为什么Numpy有时会省略数组的维度

我是 Python 的初学者。我曾经密集地使用matlab。现在我正在转向python。我有一个关于数组维数的问题。

我导入 Numpy

我首先创建一个数组 X,然后我使用一些嵌入的函数,比如 sum,来处理我的数组。最终,当我尝试检查数组 X 的维数时,它变成了:X.shape,outputs (81,)。数字 81 是我所期望的,但我也期望第 2 维是 1,而不仅仅是省略。这让我感到很不舒服,即使我直接输入X,它也输出正确,即一列和X中的数字都符合预期。

然后,当我使用另一个数组 Y 时,它实际上具有 Y.shape,输出 (81,1),然后如果我键入 X*Y,我希望看到一个维度数组 (81,1) 但相反,我看到了一个维数数组 (81,81)。

我不知道产生这个结果的潜在机制是什么。

我解决这个问题的方法很愚蠢。我首先创建一个新数组 C = zeros((81,1)),所以 C 字面上有维度 (81,1),然后我通过键入 C[:,0]=X 将我的 X 分配给 C,然后是 C.shape = (81,1)。请注意,如果我输入 C=X,则 C.shape=(81,),这又回到了我的问题。所以我可以解决我的问题,但我确信有更好的方法来解决我的问题,我也不明白为什么 python 会产生像 (81,) 这样的东西,省略了第二维。

python arrays numpy

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

为什么使用形状为 (x,) 的数组而不是 (x,1)?

我最近遇到了一些错误,因为 numpy 数组的形状为 (x,) - 这些可以通过下面的代码片段轻松修复

a = np.array([1,2,3,4]) #this form produced a bug
a.shape 
>>> (4,)  
a.shape = [4,1] #but this change fixed it 
Run Code Online (Sandbox Code Playgroud)

但这确实让我想知道,为什么 (x,) 是一维数组的默认形状?

python numpy

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

为什么numpy数组arr2d [:,:1]和arr2d [:,0]产生不同的结果?

说:

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)

arr2d[:, :1] 给我

array([[1],
       [4],
       [7]])
Run Code Online (Sandbox Code Playgroud)

arr2d[:,0] 给我

array([1, 4, 7])
Run Code Online (Sandbox Code Playgroud)

我以为他们会产生完全相同的东西.

python indexing numpy python-2.x

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

对于np.array([1,2,3]),为什么形状(3,)代替(3,1)?

我注意到对于一个排名为1的数组,其中3个元素为numpy返回(3,)形状.我知道这个元组代表了每个维度上数组的大小,但为什么不是它(3,1)呢?

import numpy as np

a = np.array([1, 2, 3])  # Create a rank 1 array
print a.shape            # Prints "(3,)"

b = np.array([[1,2,3],[4,5,6]])   # Create a rank 2 array
print b.shape                     # Prints "(2, 3)"
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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