标签: matrix

Clojure与Numpy的矩阵乘法

我正在使用Clojure中的一个应用程序,它需要繁殖大型矩阵,并且与相同的Numpy版本相比,遇到了一些大的性能问题.Numpy似乎能够在一秒钟内通过其转置乘以1,000,000x23矩阵,而等效的clojure代码需要超过六分钟.(我可以从Numpy打印出结果矩阵,所以它肯定会评估所有内容).

我在这个Clojure代码中做了哪些非常错误的事情?我可以尝试模仿Numpy的一些技巧吗?

这是python:

import numpy as np

def test_my_mult(n):
    A = np.random.rand(n*23).reshape(n,23)
    At = A.T

    t0 = time.time()
    res = np.dot(A.T, A)
    print time.time() - t0
    print np.shape(res)

    return res

# Example (returns a 23x23 matrix):
# >>> results = test_my_mult(1000000)
# 
# 0.906938076019
# (23, 23)
Run Code Online (Sandbox Code Playgroud)

和clojure:

(defn feature-vec [n]
  (map (partial cons 1)
       (for [x (range n)]
         (take 22 (repeatedly rand)))))

(defn dot-product [x y]
  (reduce + (map * x y)))

(defn transpose
  "returns the transposition of a …
Run Code Online (Sandbox Code Playgroud)

python numpy clojure matrix

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

动态编程 - 最大的方块

我需要在一个充满1和0的巨型文件中找到最大的1的平方.我知道我必须使用动态编程.我将它存储在2D数组中.任何有关找到最大方块的算法的帮助都会很棒,谢谢!

示例输入:

1 0 1 0 1 0
1 0 1 1 1 1
0 1 1 1 1 1
0 0 1 1 1 1
1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)

回答:

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

我的代码到目前为止:

int Square (Sq[int x][int y]) {
   if (Sq[x][y]) == 0) {
       return 0;
   }
   else {
       return 1+MIN( Sq(X-1,Y), Sq(X,Y-1), Sq(X-1,Y-1) );
   }
}
Run Code Online (Sandbox Code Playgroud)

(假设已经输入数组的值)

int main() {
    int Sq[5][6]; …
Run Code Online (Sandbox Code Playgroud)

c matrix dynamic-programming

40
推荐指数
3
解决办法
3万
查看次数

使用scipy计算矩阵秩

我想用scipy 计算矩阵的数学等级.最明显的函数numpy.rank计算数组的维数(即标量有维度0,向量1,矩阵2等).我知道该numpy.linalg.lstsq模块具有此功能,但我想知道这样的基本操作是否内置于矩阵类中.

这是一个明确的例子:

from numpy import matrix, rank
A = matrix([[1,3,7],[2,8,3],[7,8,1]])
print rank(A)
Run Code Online (Sandbox Code Playgroud)

这给出2了维度,我正在寻找答案3.

python numpy matrix scipy

40
推荐指数
3
解决办法
3万
查看次数

如何将表旋转45度并将结果保存到另一个表中?

我有一张桌子.

---------
| a | b |
---------
| a | b |
---------
Run Code Online (Sandbox Code Playgroud)

我想将它旋转45度(顺时针或逆时针)并将其保存到另一张桌子中.例如,如果我逆时针旋转45度,它将是:

-------------
| b |   |   |
-------------
| a | b |   |
-------------
| a |   |   |
-------------
Run Code Online (Sandbox Code Playgroud)

另一个例子,当我旋转

-------------
| a | b | c |
-------------
| d | e | f |
-------------
| g | h | i |
-------------
Run Code Online (Sandbox Code Playgroud)

它将变为

---------------------
| c |   |   |   |   |
---------------------
| b | f |   |   |   |
--------------------- …
Run Code Online (Sandbox Code Playgroud)

sql sql-server algorithm matrix

40
推荐指数
2
解决办法
1983
查看次数

什么是在python中找到特征值/向量的最快方法?

目前我正在使用numpy来完成这项工作.但是,因为我正在处理具有数千行/列的矩阵,后来这个数字将达到数万,我想知道是否存在可以更快地执行此类计算的包?

python numpy matrix linear-algebra eigenvalue

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

错误"参数意味着行数不同:x,y"是什么意思?

我正在尝试使用csv文件的元素创建一个图,如下所示:

h1,h2,h3,h4
a,1,0,1,0
b,1,1,0,1
c,0,0,1,0
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但收到错误说

Error in data.frame(id = varieties, attr(mat, "row.names"), check.rows = FALSE) : 
  arguments imply differing number of rows: 8, 20 
Run Code Online (Sandbox Code Playgroud)

我的示例数据有8列和20行(不包括标题和行名称).我尝试在线查找并尝试实施一些修复,但问题仍然存在.我真的很感激任何帮助.

mat <- read.csv("trial.csv", header=T, row.names=1)
varieties = names(mat)
df <- data.frame(id=varieties,attr(mat, "row.names"), check.rows= FALSE)
Run Code Online (Sandbox Code Playgroud)

csv plot r matrix ggplot2

40
推荐指数
3
解决办法
20万
查看次数

如何在PyTorch中做矩阵的乘积

在numpy中我可以做一个简单的矩阵乘法,如下所示:

a = numpy.arange(2*3).reshape(3,2)
b = numpy.arange(2).reshape(2,1)
print(a)
print(b)
print(a.dot(b))
Run Code Online (Sandbox Code Playgroud)

但是,当我使用PyTorch Tensors进行此操作时,这不起作用:

a = torch.Tensor([[1, 2, 3], [1, 2, 3]]).view(-1, 2)
b = torch.Tensor([[2, 1]]).view(2, -1)
print(a)
print(a.size())

print(b)
print(b.size())

print(torch.dot(a, b))
Run Code Online (Sandbox Code Playgroud)

此代码抛出以下错误:

RuntimeError:/Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorMath.c:503中的张量大小不一致

有关在PyTorch中如何进行矩阵乘法的任何想法?

python matrix pytorch

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

MATLAB中的矩阵数组

我正在寻找一种在MATLAB中将大量可变数量的矩阵存储在数组中的方法.

有没有办法实现这个目标?

例:

for i: 1:unknown
  myArray(i) = zeros(500,800);
end
Run Code Online (Sandbox Code Playgroud)

如果不知道数组的长度是多少,我可以根据需要修改附加信息.

更新:性能是我努力实现这一目标的主要原因.之前它曾将数据作为单个矩阵获取,实时显示,然后继续处理下一组数据.

我尝试使用多维数组,如下面Rocco所建议的那样,但是我的数据太大了以至于我用完了内存,我可能需要针对我的情况寻找另一种选择.当我尝试其他建议时会更新.

更新2:谢谢大家的建议,但是我应该预先指定,精度和速度都是这里的一个不可或缺的因素,在尝试三维数组并重新评估方法之前,我可能需要考虑回到原来的方法.用于导入数据.

arrays matlab matrix

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

如何在Python中使用Numpy Matrix制作List

我使用numpy中的dot()函数将3x3的矩阵与1x3的numpy.array相乘.输出例如是:

[[0.16666667 0.66666667 0.16666667]]

其类型:

<class 'numpy.matrixlib.defmatrix.matrix'>
Run Code Online (Sandbox Code Playgroud)

我该如何将其转换为列表.因为我知道结果将始终是1x3的矩阵所以它应该被转换为列表,因为我需要能够稍后循环它以计算其中两个列表的皮尔逊距离.

总结一下:如何从这个矩阵中制作一个列表?

python numpy list matrix

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

如何将矩阵的索引映射到一维数组(C++)?

我有一个8x8矩阵,像这样:

char matrix[8][8];
Run Code Online (Sandbox Code Playgroud)

另外,我有一个包含64个元素的数组,如下所示:

char array[64];
Run Code Online (Sandbox Code Playgroud)

然后我将矩阵绘制成一个表格,并用数字填充单元格,每个数字从左到右,从上到下递增.

如果我将索引3(列)和4(行)索引到矩阵中,我知道它对应于数组中位置35处的元素,因为它可以在我绘制的表格中看到.我相信有一些公式可以将矩阵的2个索引转换为数组的单个索引,但我无法弄清楚它是什么.

有任何想法吗?

c c++ arrays matrix

39
推荐指数
3
解决办法
5万
查看次数