这是原始代码:
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甚至可以在这个容器构思中处理这个想法,还是需要进一步重塑容器以进一步暴露内部矩阵元素?
确定给定矩阵“ M”是否等于同一性的最佳方法是什么?即类似:
if numpy.identity(3) == M:
     ...
Run Code Online (Sandbox Code Playgroud) 假设我有一个像这样的 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)
对角线包含预期结果,但我想知道是否可以避免边缘计算。
我有一个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中最有效的方法是什么?
假设我有一个形状的特征图(即 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
我做了一些计算和测量的性能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时间.
另外:关于连续和非连续数组之间差异的这个优秀答案帮助了很多!
我正在尝试使用以下代码行将“数据”(大小为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)
关于如何解决此错误的任何建议?
我有一个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算法来做到这一点。有没有更好的模块?   
输入:
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(因此转换)时起作用.
假设我有一本字典:
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 ×9
numpy ×8
matrix ×4
arrays ×2
python-3.x ×2
dictionary ×1
matlab ×1
numpy-einsum ×1
numpy-ufunc ×1
operators ×1
performance ×1
reshape ×1
reverse ×1
sorting ×1
valueerror ×1