标签: numpy

为什么这个函数在 JAX 和 numpy 中变慢?

我有以下 numpy 函数,如下所示,我正在尝试使用 JAX 进行优化,但无论出于何种原因,它都变慢了。

有人可以指出我可以做些什么来提高这里的性能吗?我怀疑这与 Cg_new 发生的列表理解有关,但将其分开并不会在 JAX 中产生任何进一步的性能提升。

import numpy as np 

def testFunction_numpy(C, Mi, C_new, Mi_new):
    Wg_new = np.zeros((len(Mi_new[:,0]), len(Mi[0])))
    Cg_new = np.zeros((1, len(Mi[0])))
    invertCsensor_new = np.linalg.inv(C_new)

    Wg_new = np.dot(invertCsensor_new, Mi_new)
    Cg_new = [np.dot(((-0.5*(Mi_new[:,m].conj().T))), (Wg_new[:,m])) for m in range(0, len(Mi[0]))] 

    return C_new, Mi_new, Wg_new, Cg_new

C = np.random.rand(483,483)
Mi = np.random.rand(483,8)
C_new = np.random.rand(198,198)
Mi_new = np.random.rand(198,8)

%timeit testFunction_numpy(C, Mi, C_new, Mi_new)
#1000 loops, best of 3: 1.73 ms per loop
Run Code Online (Sandbox Code Playgroud)

这是 JAX 等效项:

import jax.numpy as …
Run Code Online (Sandbox Code Playgroud)

python optimization performance numpy jax

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

如何在类似于点积的 numpy 中获得“点加法”?

我对 numpy 有点陌生,并且正在努力解决这个问题。我有两个二维 numpy 数组:

array1 = [a1, a2, ..., an]
array2 = [b1, b2, ..., am]
Run Code Online (Sandbox Code Playgroud)

a1, a2, b1, 和b2都是一维数组,其中正好有 100 个浮点数。然而,array1array2具有不同的长度。所以array1和分别array2具有形状(n, 100)(m, 100),其中nm是任意长度。

我想在它们之间执行某种修改后的点积,以便我可以输出以下矩阵:

array([[ a1+b1, a1+b2, a1+b3, ...],
       [ a2+b1, a2+b2, a2+b3, ...],
       [ a3+b1, a3+b2, a3+b3, ...],
       [...]])
Run Code Online (Sandbox Code Playgroud)

我明白这np.dot(array1, array2.T)让我非常接近。它只是给我a1•b1而不是a1+b1在所需的输出数组中。

使用 numpy 获取所需数组的最有效的计算方法是什么?提前致谢!

python arrays numpy python-3.x numpy-ufunc

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

逻辑与嵌套布尔数组

我有一个(很长)a带有k True条目的布尔数组和一个b长度为 的布尔数组k。我想得到一个布尔数组cTrue当且仅当a“和”bTrue

import numpy

a = numpy.array([False, False, True, False, True, False])
b = numpy.array([True, False])

assert numpy.sum(a) == len(b)  # guaranteed

c = numpy.zeros(len(a), dtype=bool)
idx_b = 0
for k in range(len(a)):
    if a[k]:
        if b[idx_b]:
            c[k] = True
        idx_b += 1

print(c)
Run Code Online (Sandbox Code Playgroud)
[False False  True False False False]
Run Code Online (Sandbox Code Playgroud)

这里使用了一个循环,但我认为必须有一种更快的布尔索引方式,但我无法完全理解。

任何提示?

python arrays numpy

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

如何修复“运行时错误:由于 Windows 运行时中的错误,当前的 Numpy 安装未能通过健全性检查”。

安装新软件包后,我在运行 Python 程序时遇到问题。我收到的错误消息指出:

运行时错误:由于 Windows 运行时中的错误,当前的 Numpy 安装(“[文件位置]”)未能通过健全性检查。有关更多信息,请参阅此问题:[URL]

我使用 VS 代码。

python numpy python-3.x

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

由于 polyfit 错误,macOS Big Sur python3 无法导入 numpy

2021 年 1 月的更新:我在2021 年 1 月执行了 Big Sur 的全新安装,并使用 将 pip 升级到最新版本python3 -m pip install --upgrade pip --user,并且安装numpy没有问题,并且没有下面的错误消息。

2020 年 11 月的原始问题

我在 2019 macbook pro 上使用 macOS big sur。我可以使用python3 -m pip install numpy --user. 注意我没有brew; 我只是使用 Xcode 命令行工具中的 python3。我在许多其他地方看到过这个错误报告,但他们似乎都使用 brew。

但是,当我尝试时import numpy as np,我收到以下错误消息。

Python(488,0x11700be00) malloc: can't allocate region
:*** mach_vm_map(size=18446744071565352960, flags: 100) failed (error code=3)
Python(488,0x11700be00) malloc: *** set a breakpoint in malloc_error_break to …
Run Code Online (Sandbox Code Playgroud)

python macos numpy xcode-command-line-tools macos-big-sur

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

类型错误:无法将“4”解释为数据类型

我正在尝试学习神经网络。以下是代码。我收到错误“TypeError:无法将“4”解释为数据类型”任何人都可以帮我识别错误吗?

import numpy as np

inputs = [[1, 2 , 3, 2.5],
      [2, 5, 9, 10],
      [5, 1, 2, 7],
      [3, 2, 1, 4],
      [1,1.5, 7, 8]]

class layer_dense:
      def __init__ (self, n_inputs, m_neurons):
        self.weights= np.random.rand(n_inputs, m_neurons)
        self.biases= np.zeros(1, m_neurons)
     def forward (self, inputs):
        self.output= np.dot(inputs, self.weights)+self.biases
    
layer1 = layer_dense(4, 4)
layer2 = layer_dense(5,2)

layer1.forward(inputs)
layer2.forward(layer1.output)
print(layer2.output)
Run Code Online (Sandbox Code Playgroud)

python numpy forward neural-network conv-neural-network

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

将一列数据帧转换为基于其他列的 numpy 数组或张量

考虑一个像这样的数据框:

df = pd.DataFrame({'r': [1, 1, 2, 2], 'c': [0, 2, 1, 2], 'v': [2, 4, 3, 5],})
Run Code Online (Sandbox Code Playgroud)

我想提取一个 numpy 数组或张量,将 'r' 和 'c' 作为矩阵的行和列索引。所以相应的矩阵将是这样的:

arr = array([[0, 0, 0],
   [2, 0, 4],
   [0, 3, 5]])
Run Code Online (Sandbox Code Playgroud)

那么有没有一种体面的方法来做到这一点,或者我必须遍历每个 df 行?从像 arr 这样的矩阵中提取数据帧 df 怎么样?

python numpy pandas tensorflow

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

总和忽略熊猫数据框中的字符串

我正在使用 Pandas 制作 DataFrame。然而,DataFrame 的某些部分包含一个字符串。沿数据框的行求和时,如何忽略总和中的这些字符串?

df["sum"] = df.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

4
推荐指数
2
解决办法
283
查看次数

为什么使用 np.empty 进行分配而不是 O(1)

官方文档上是numpy 这么说的

返回给定形状和类型的新数组,而不初始化条目。

for np.empty,这意味着创建(分配)这个数组所花费的时间将是 O(1),但一些简单的测试timeit表明情况并非如此:

>>> timeit.timeit(lambda: np.empty(100000000 ), number=10000)
0.2733485999999914
>>> timeit.timeit(lambda: np.empty(1000000000), number=10000)
0.8293009999999867
Run Code Online (Sandbox Code Playgroud)

作为一个附带问题,未触及的np.empty数组中存在哪些值?它们都是非常小的值,但我希望它们只是该地址内存中存在的任何值。(示例数组:np.empty(2) = array([-6.42940774e-036, 2.07409447e-117])。这些看起来不像存储在内存中的东西)

python numpy time-complexity

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

根据最近距离找到最佳的唯一邻居对

一般问题

首先让我们更一般地解释这个问题。我有一组具有 x,y 坐标的点,并希望找到最佳的唯一邻居对,以使所有对中的邻居之间的距离最小化,但点不能用于多于一对。

一些简单的例子

注意:点不是有序的,x 和 y 坐标都在 0 到 1000 之间变化,但为了简单起见,在下面的例子中 x==y 和项目是有序的。

首先,假设我有以下点矩阵:

matrix1 = np.array([[1, 1],[2, 2],[5, 5],[6, 6]])
Run Code Online (Sandbox Code Playgroud)

对于这个数据集,输出应该是[0,0,1,1]点 1 和 2 彼此最接近,点 3 和 4 提供对 0 和 2。

其次,两点不能有相同的伙伴。如果我们有矩阵:

matrix2 = np.array([[1, 1],[2, 2],[4, 4],[6, 6]])
Run Code Online (Sandbox Code Playgroud)

这里 pt1 和 pt3 最接近 pt2,但 pt1 相对更近,所以输出应该再次是[0,0,1,1].

第三,如果我们有矩阵:

matrix3 = np.array([[1, 1],[2, 2],[3, 3],[4, 4]])
Run Code Online (Sandbox Code Playgroud)

现在 pt1 和 pt3 再次与 pt2 最接近,但现在它们处于相同的距离。现在输出应该再次是[0,0,1,1]pt4 最接近 pt3。

第四,在点数为奇数的情况下,最远的点应该是nan,例如

matrix4 = np.array([[1, 1],[2, 2],[4,4]]) …
Run Code Online (Sandbox Code Playgroud)

python numpy neighbours scipy pairing

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