小编kma*_*o23的帖子

矢量化和嵌套矩阵乘法

这是原始代码:

K = zeros(N*N)
for a=1:N
    for i=1:I
        for j=1:J
            M = kron(X(:,:,a).',Y(:,:,a,i,j));

            %A function that essentially adds M to K. 
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

目标是向量化kroniker乘法调用.我的直觉是将X和Y视为矩阵的容器(作为参考,X和Y的切片被馈送到kron是7x7阶的矩阵).在此容器方案下,X显示为1-D容器,Y显示为3-D容器.我的下一个猜测是将Y重塑为2-D容器或更好的1-D容器,然后进行X和Y的元素乘法.问题是:如何以保留M和M的轨迹的方式重塑matlab甚至可以在这个容器构思中处理这个想法,还是需要进一步重塑容器以进一步暴露内部矩阵元素?

matlab vectorization matrix-multiplication

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

确定矩阵是否为单位矩阵(numpy)

确定给定矩阵“ M”是否等于同一性的最佳方法是什么?即类似:

if numpy.identity(3) == M:
     ...
Run Code Online (Sandbox Code Playgroud)

python arrays numpy matrix numpy-ndarray

3
推荐指数
2
解决办法
2429
查看次数

使用 numpy einsum 计算矩阵列向量的内积

假设我有一个像这样的 numpy 矩阵:

[[   1    2    3]
 [  10  100 1000]]
Run Code Online (Sandbox Code Playgroud)

我想用它自己计算每列的内积,所以结果是:

[1*1 + 10*10    2*2 + 100*100    3*3 + 1000*1000] == [101, 10004, 1000009]
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以使用该einsum函数(并更好地理解它)。

到目前为止,我能得到的最接近的结果是:

import numpy as np

arr = np.array([[1, 2, 3], [10, 100, 1000]])

res = np.einsum('ij,ik->jk', arr, arr)

# [[    101    1002   10003]
#  [   1002   10004  100006]
#  [  10003  100006 1000009]]
Run Code Online (Sandbox Code Playgroud)

对角线包含预期结果,但我想知道是否可以避免边缘计算。

python numpy matrix multidimensional-array numpy-einsum

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

除了一个特定值之外,如何将numpy数组中的所有值替换为零?

我有一个2D numpy数组,其中包含'n'个唯一值.我想生成一个二进制矩阵,其中所有值都替换为"零",并且我指定的值被指定为"一".

例如,我有一个如下数组,我想要为35的所有实例分配'one':

array([[12, 35, 12, 26],
       [35, 35, 12, 26]])
Run Code Online (Sandbox Code Playgroud)

我想获得以下输出:

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

在Python中最有效的方法是什么?

python numpy matrix multidimensional-array

3
推荐指数
2
解决办法
2354
查看次数

将特征图(3D 数组)拆分为 2D 数组

假设我有一个形状的特征图(即 3D 数组) (32, 32, 96)

In [573]: feature_map = np.random.randint(low=0, high=255, size=(32, 32, 96))
Run Code Online (Sandbox Code Playgroud)

现在,我想单独可视化每个特征图。所以,我想提取每个正面切片(即 shape 的二维数组(32, 32)),以便应该给出 96 个这样的特征图。

如何获取这些数组,可能不是作为内存高效的副本?由于这只是为了可视化,一个视图就足够了!

python numpy computer-vision multidimensional-array deep-learning

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

NumPy ufuncs在一个轴上比另一个轴快2倍

我做了一些计算和测量的性能ufuncs喜欢np.cumsum在不同的轴,以使代码更高性能.

In [51]: arr = np.arange(int(1E6)).reshape(int(1E3), -1)

In [52]: %timeit arr.cumsum(axis=1)
2.27 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [53]: %timeit arr.cumsum(axis=0)
4.16 ms ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)

cumsum超过轴1的速度几乎比cumsum轴0 快2倍.为什么它会如此以及幕后发生了什么?能够清楚地了解其背后的原因是很好的.谢谢!


更新:经过一些研究后,我意识到如果有人正在构建一个总是只对某个轴求和的应用程序,那么应该按照适当的顺序初始化数组:即轴的C顺序 = 1和或Fortran-order for axis = 0 sums,以节省CPU时间.

另外:关于连续和非连续数组之间差异的这个优秀答案帮助了很多!

python performance numpy numpy-ufunc numpy-ndarray

3
推荐指数
2
解决办法
102
查看次数

如何截断一个numpy数组?

我正在尝试使用以下代码行将“数据”(大小为112943)截断为形状(1,15000):

data = np.reshape(data, (1, 15000))
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误:

ValueError: cannot reshape array of size 112943 into shape (1,15000)
Run Code Online (Sandbox Code Playgroud)

关于如何解决此错误的任何建议?

python numpy reshape valueerror numpy-slicing

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

按重复的列值删除行

我有一个numpy.ndarray类似于此的大型数据集:

array([[ -4,   5,   9,  30,  50,  80],
       [  2,  -6,   9,  34,  12,   7],
       [ -4,   5,   9,  98, -21,  80],
       [  5,  -9,   0,  32,  18,   0]])
Run Code Online (Sandbox Code Playgroud)

我想删除重复的行,其中第 0、1、2 和 5 列相等。即在上述矩阵上,响应将是:

-4, 5, 9, 30, 50, 80
2, -6, 9, 34, 12, 7
5, -9, 0, 32, 18, 0
Run Code Online (Sandbox Code Playgroud)

numpy.unique做了一些非常相似的事情,但它只在所有列(轴)上找到重复项。我只想要特定的列。如何解决这个问题numpy?我找不到任何像样的numpy算法来做到这一点。有没有更好的模块?

python numpy matrix multidimensional-array python-3.x

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

这行中的'<'做什么?:data + = dt <b

输入:

dt    = [6,7,8,9,10]
data  = [1,2,3,4,5]

b     = 8.0
b     = np.require(b, dtype=np.float)

data  += dt  < b
data
Run Code Online (Sandbox Code Playgroud)

输出:

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

我试图输入不同的数字,但仍然无法弄清楚那里的"<"做什么......而且,它似乎仅在b是np.float(因此转换)时起作用.

python arrays numpy operators

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

Python反向字典项目顺序

假设我有一本字典:

d = {3: 'three', 2: 'two', 1: 'one'}
Run Code Online (Sandbox Code Playgroud)

我想重新排列此字典的顺序,以便该字典为:

d = {1: 'one', 2: 'two', 3: 'three'}
Run Code Online (Sandbox Code Playgroud)

我在想类似reverse()列表功能的东西,但是没有用。预先感谢您的回答!

python sorting reverse dictionary python-3.x

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