我有以下 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) 我对 numpy 有点陌生,并且正在努力解决这个问题。我有两个二维 numpy 数组:
array1 = [a1, a2, ..., an]
array2 = [b1, b2, ..., am]
Run Code Online (Sandbox Code Playgroud)
a1, a2, b1, 和b2都是一维数组,其中正好有 100 个浮点数。然而,array1与array2具有不同的长度。所以array1和分别array2具有形状(n, 100)和(m, 100),其中n和m是任意长度。
我想在它们之间执行某种修改后的点积,以便我可以输出以下矩阵:
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 获取所需数组的最有效的计算方法是什么?提前致谢!
我有一个(很长)a带有k True条目的布尔数组和一个b长度为 的布尔数组k。我想得到一个布尔数组c,True当且仅当a“和”b是True:
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 程序时遇到问题。我收到的错误消息指出:
运行时错误:由于 Windows 运行时中的错误,当前的 Numpy 安装(“[文件位置]”)未能通过健全性检查。有关更多信息,请参阅此问题:[URL]
我使用 VS 代码。
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) 我正在尝试学习神经网络。以下是代码。我收到错误“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) 考虑一个像这样的数据框:
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 怎么样?
我正在使用 Pandas 制作 DataFrame。然而,DataFrame 的某些部分包含一个字符串。沿数据框的行求和时,如何忽略总和中的这些字符串?
df["sum"] = df.sum(axis=1)
Run Code Online (Sandbox Code Playgroud) 返回给定形状和类型的新数组,而不初始化条目。
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])。这些看起来不像存储在内存中的东西)
一般问题
首先让我们更一般地解释这个问题。我有一组具有 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) numpy ×10
python ×10
arrays ×2
pandas ×2
python-3.x ×2
dataframe ×1
forward ×1
jax ×1
macos ×1
neighbours ×1
numpy-ufunc ×1
optimization ×1
pairing ×1
performance ×1
scipy ×1
tensorflow ×1