各有哪些优缺点?
从我所看到的情况来看,如果需要的话,任何一个都可以作为另一个的替代品,那么我是否应该使用它们或者我应该只坚持其中一个?
该计划的风格会影响我的选择吗?我正在使用numpy做一些机器学习,所以确实有很多矩阵,但也有很多向量(数组).
matrixNumPy中班级的状态是什么?
我一直被告知我应该使用这门ndarray课程.matrix在我编写的新代码中使用类是否值得/安全?我不明白为什么我应该使用ndarrays代替.
我在Python scipy模块中尝试了一个非常基本的示例,用于转置方法,但没有给出预期的结果.我在pylab模式下使用Ipython.
a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)
Run Code Online (Sandbox Code Playgroud)
如果我打印数组"a"和"b"的内容,它们是相似的.
期望是:(这将导致Matlab om转置)
[1,
2,
3]
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算股票投资组合的一阶和二阶矩(即预期回报和标准差)。
expected_returns_annual
Out[54]:
ticker
adj_close CNP 0.091859
F -0.007358
GE 0.095399
TSLA 0.204873
WMT -0.000943
dtype: float64
type(expected_returns_annual)
Out[55]: pandas.core.series.Series
weights = np.random.random(num_assets)
weights /= np.sum(weights)
returns = np.dot(expected_returns_annual, weights)
Run Code Online (Sandbox Code Playgroud)
所以通常预期回报计算为
(x1,...,xn' * (R1,...,Rn)
x1,...,xn 是具有约束的权重,所有权重必须加起来为 1,' 表示向量已转置。
现在我有点想知道 numpy dot 函数,因为
returns = np.dot(expected_returns_annual, weights)
Run Code Online (Sandbox Code Playgroud)
和
returns = np.dot(expected_returns_annual, weights.T)
Run Code Online (Sandbox Code Playgroud)
给出相同的结果。
我还测试了 weights.T 和 weights 的形状。
weights.shape
Out[58]: (5,)
weights.T.shape
Out[59]: (5,)
Run Code Online (Sandbox Code Playgroud)
weights.T 的形状应该是 (,5) 而不是 (5,),但 numpy 将它们显示为相等(我也尝试过 np.transpose,但结果相同)
有人知道为什么 numpy 会这样吗?在我看来, np.dot 乘积会自动塑造向量正确的原因,以便向量乘积运行良好。那是对的吗?
最好的问候汤姆
为什么numpy可以将2x2矩阵乘以1x2行向量?
import numpy as np
I = np.array([[1.0, 0.0], [0.0, 1.0]])
x = np.array([2.0,3.0])
In: I * x
Out: array([[ 2., 0.], [ 0., 3.]])
Run Code Online (Sandbox Code Playgroud)
转置x也没有任何意义.行向量保持行向量?
In: x.T
Out: array([ 2., 3.])
Run Code Online (Sandbox Code Playgroud)
从数学的角度来看,表示非常混乱.